1、select top

select top  用于规定要返回的数据的数目
注意:并非所有的数据库系统都支持 SELECT TOP 语句。 MySQL 支持 LIMIT 语句来选取指定的条数数据, Oracle 可以使用 ROWNUM 来选取。
SqlServer语法:
SELECT TOP 50 PERCENT * FROM Websites;

  

Oracle语法:

SELECT *
FROM Persons
WHERE ROWNUM <=5;

  

MySQL语法:

SELECT *
FROM Persons
LIMIT 5;

  

2、like

语法:

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;

"%" 符号用于在模式的前后定义通配符(默认字母)

3、SQL通配符

1、通配符可用于替代字符串中的任何其他字符。
2、在 SQL 中,通配符与 SQL LIKE 操作符一起使用

例:

选取 name 以 "G"、"F" 或 "s" 开始的所有网站:( MySQL 中使用 REGEXP 或 NOT REGEXP 运算符 (或 RLIKE 和 NOT RLIKE) 来操作正则表达式。)
SELECT * FROM Websites
WHERE name REGEXP '^[GFs]';

  

4、in

IN 操作符允许您在 WHERE 子句中规定多个值。

语法:

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

例:

SELECT * FROM Websites
WHERE name IN ('Google','菜鸟教程');

  

in和=对比:

相同点:均在WHERE中使用作为筛选条件之一、均是等于的含义。
不同点:IN可以规定多个值,等于规定一个值。
IN
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);

=
SELECT column_name(s)
FROM table_name
WHERE column_name=value1;

  

5、between

BETWEEN 操作符用于选取介于两个值之间的数据范围内的值。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
语法:
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;

如需显示不在上面实例范围内的网站,使用 NOT BETWEEN:

SELECT * FROM Websites
WHERE alexa NOT BETWEEN 1 AND 20;

  

6、SQL别名

语法:

SELECT column_name AS alias_name
FROM table_me;

例:

SELECT name AS n, country AS c
FROM Websites; 把三个列(url、alexa 和 country)结合在一起,并创建一个名为 "site_info" 的别名: SELECT name, CONCAT(url, ', ', alexa, ', ', country) AS site_info
FROM Websites;

  

表的SQL别名语法:

SELECT column_name(s)
FROM table_name AS alias_name;

例:

SELECT w.name, w.url, a.count, a.date
FROM Websites AS w, access_log AS a
WHERE a.site_id=w.id and w.name="菜鸟教程";

  

7、join

作用:SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

(1)inner join(也可以缩写成join)——内联接

求交集,如果表中有至少一个匹配,则返回行

SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;

SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;

  

(2)left join——左联接

LEFT JOIN 关键字从左表(table1)返回所有的行,即使右表(table2)中没有匹配。如果右表中没有匹配,则结果为 NULL。

SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;

SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;

  

(3)right join——右联接

RIGHT JOIN 关键字从右表(table2)返回所有的行,即使左表(table1)中没有匹配。如果左表中没有匹配,则结果为 NULL。

SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name=table2.column_name; 

SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;

  

(4)full join(也叫作full outer join)——全联接

FULL OUTER JOIN 关键字只要左表(table1)和右表(table2)其中一个表中存在匹配,则返回行.

FULL OUTER JOIN 关键字结合了 LEFT JOIN 和 RIGHT JOIN 的结果。

SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;  

8、union

作用: UNION 操作符合并两个或多个 SELECT 语句的结果。

注意:UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。
union语法:
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

  

union all语法:

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2; 注意:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名

9、select  into

SELECT INTO 语句从一个表复制数据,然后把数据插入到另一个新表中。

    注意:
    MySQL 数据库不支持 SELECT ... INTO 语句,但支持 INSERT INTO ... SELECT
 
select into语法:
SELECT *
INTO newtable [IN externaldb]
FROM table1; 或: SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
 

下面的语句可以复制表结构和表数据:

CREATE TABLE 新表 AS SELECT * FROM 旧表;
或:
CREATE TABLE 新表 SELECT * FROM 旧表;

10、insert into  select

INSERT INTO SELECT 语句从一个表复制数据,然后把数据插入到一个已存在的表中。 目标表中任何已存在的行都不会受影响。

语法:

INSERT INTO table2
SELECT * FROM table1;

----------------------------------
INSERT INTO table2
(column_name(s))
SELECT column_name(s)
FROM table1;

扩展:

1. 复制表结构及其数据:
create table table_name_new as select * from table_name_old
2. 只复制表结构:
create table table_name_new as select * from table_name_old where 1=2;
或者:
create table table_name_new like table_name_old
3. 只复制表数据:
如果两个表结构一样:
insert into table_name_new select * from table_name_old
如果两个表结构不一样:
insert into table_name_new(column1,column2...) select column1,column2... from table_name_old

  

11、创建数据库语句

CREATE DATABASE dbname;

  

12、创建表语句

CREATE TABLE table_name
(
column_name1 data_type(size),
column_name2 data_type(size),
column_name3 data_type(size),
....
);

  

13、SQL约束


SQL 约束用于规定表中的数据规则。
如果存在违反约束的数据行为,行为会被约束终止。
约束可以在创建表时规定(通过 CREATE TABLE 语句),或者在表创建之后规定(通过 ALTER TABLE 语句)。 

CREATE TABLE table_name
(
column_name1 data_type(size) constraint_name,
column_name2 data_type(size) constraint_name,
column_name3 data_type(size) constraint_name,
....
);

(1) not null

NOT NULL 约束强制列不接受 NULL 值。
NOT NULL 约束强制字段始终包含值。这意味着,如果不向字段添加值,就无法插入新记录或者更新记录。
例子:
强制 "ID" 列、 "LastName" 列以及 "FirstName" 列不接受 NULL 值:
CREATE TABLE Persons ( ID int NOT NULL, LastName varchar(255) NOT NULL, FirstName varchar(255) NOT NULL, Age int ); 在一个已创建的表的 "Age" 字段中添加 NOT NULL 约束如下所示:
ALTER TABLE Persons MODIFY Age int NOT NULL; 在一个已创建的表的 "Age" 字段中删除 NOT NULL 约束如下所示:
ALTER TABLE Persons MODIFY Age int NULL;

(2)unique

UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
在 "Persons" 表创建时在 "P_Id" 列上创建 UNIQUE 约束:
MySQL语法: CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
) SQL Server / Oracle / MS Access语法: CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

  

如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,使用下面的 SQL 语法:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)

  

当表已被创建时,如需在 "P_Id" 列创建 UNIQUE 约束,使用下面的 SQL:
MySQL / SQL Server / Oracle / MS Access: ALTER TABLE Persons
ADD UNIQUE (P_Id); 如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束: ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)

  

如需撤销 UNIQUE 约束,使用下面的 SQL:
MySQL: ALTER TABLE Persons
DROP INDEX uc_PersonID SQL Server / Oracle / MS Access: ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID

  

(3)primary key

PRIMARY KEY 约束唯一标识数据库表中的每条记录。
主键必须包含唯一的值。
主键列不能包含 NULL 值。
每个表都应该有一个主键,并且每个表只能有一个主键。

CREATE TABLE 时的 SQL PRIMARY KEY 约束:

MySQL:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
) SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)

如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)

  

ALTER TABLE 时的 SQL PRIMARY KEY 约束

MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id) -------------------------------------------------------------------------------------
如需命名 PRIMARY KEY 约束,并定义多个列的 PRIMARY KEY 约束,请使用下面的 SQL 语法:
MySQL / SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

  

撤销 PRIMARY KEY 约束

MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY SQL Server / Oracle / MS Access: ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID

  

(4)foreign  key

一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。

(5)check约束

CHECK 约束用于限制列中的值的范围。
如果对单个列定义 CHECK 约束,那么该列只允许特定的值。
如果对一个表定义 CHECK 约束,那么此约束会基于行中其他列的值在特定的列中对值进行限制。

(6)default约束

DEFAULT 约束用于向列中插入默认值。
如果没有规定其他的值,那么会将默认值添加到所有的新记录。

 

14、创建索引

create index

CREATE INDEX 语句用于在表中创建索引。
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据。
在表上创建一个简单的索引。允许使用重复的值:

CREATE INDEX index_name
ON table_name (column_name)

  

表上创建一个唯一的索引。不允许使用重复的值:唯一的索引意味着两个行不能拥有相同的索引值。Creates a unique index on a table. Duplicate values are not allowed:

CREATE UNIQUE INDEX index_name
ON table_name (column_name)
注释:用于创建索引的语法在不同的数据库中不一样。因此要检查数据库中创建索引的语法。

 

15、删除索引、表以及数据库

16、alter

17、auto increment字段

Auto-increment 会在新记录插入表中时生成一个唯一的数字。

18、视图

在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。
视图包含行和列,就像一个真实的表。视图中的字段就是来自一个或多个数据库中的真实的表中的字段。
您可以向视图添加 SQL 函数、WHERE 以及 JOIN 语句,也可以呈现数据,就像这些数据来自于某个单一的表一样。
(1)创建视图语法:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
注释:视图总是显示最新的数据!每当用户查询视图时,数据库引擎通过使用视图的 SQL 语句重建数据。

 

(2)创建视图示例:

CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No 我们可以像这样查询上面这个视图: SELECT * FROM [Current Product List]

  

(3)更新视图

语法:

CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition

  

向 "Current Product List" 视图添加 "Category" 列。将通过下列 SQL 更新视图:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No

  

(4)删除视图

语法:

DROP VIEW view_name

  

19、DATE()函数

20、NULL值

21、NULL函数

22、通用数据类型

数据库表中的每个列都要求有名称和数据类型。Each column in a database table is required to have a name and a data type.
SQL 开发人员必须在创建 SQL 表时决定表中的每个列将要存储的数据的类型。数据类型是一个标签,是便于 SQL 了解每个列期望存储什么类型的数据的指南,它也标识了 SQL 如何与存储的数据进行交互。

 

23、用于各种数据库的数据类型

SQL语句之高级使用的更多相关文章

  1. C#sql语句

    SQL语句大全删除数据库 drop database databasename SQL语句大全备份 --- 创建备份数据的 device USE master EXEC sp_addumpdevice ...

  2. ASP.NET MVC深入浅出(被替换) 第一节: 结合EF的本地缓存属性来介绍【EF增删改操作】的几种形式 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery ) 第四节: EF调用存储过程的通用写法和DBFirst模式子类调用的特有写法 第六节: EF高级属性(二) 之延迟加载、立即加载、显示加载(含导航属性) 第十节: EF的三种追踪

    ASP.NET MVC深入浅出(被替换)   一. 谈情怀-ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态 ...

  3. 浅谈c#的三个高级参数ref out 和Params C#中is与as的区别分析 “登陆”与“登录”有何区别 经典SQL语句大全(绝对的经典)

    浅谈c#的三个高级参数ref out 和Params   c#的三个高级参数ref out 和Params 前言:在我们学习c#基础的时候,我们会学习到c#的三个高级的参数,分别是out .ref 和 ...

  4. MySQL高级(进阶)SQL语句

    MySQL高级(进阶)SQL语句 目录 MySQL高级(进阶)SQL语句 一.实例准备--制表 1. 表1(商店区域表) 2. 表2(商店销售表) 3. 表3(城市表) 4. 表4(total_sal ...

  5. 29.MySQL高级SQL语句

    MySQL高级SQL语句 目录 MySQL高级SQL语句 创建两个表 SELECT DISTINCT WHERE AND OR IN BETWEEN 通配符 LIKE ORDER BY 函数 数学函数 ...

  6. 高级SQL语句

    改变数据 insert record 插入一行 insert into foods (name, type_id) values ('Cinnamon Bobka', 1); 如果在insert语句中 ...

  7. 50句高级SQL语句

    一个题目涉及到的50个Sql语句 --(下面表的结构以给出,自己在数据库中建立表.并且添加相应的数据,数据要全面些. 其中Student表中,SId为学生的ID) ------------------ ...

  8. Sql语法高级应用之一:使用sql语句如何实现不同的角色看到不同的数据

    前言 在常见的管理系统中,通常都有这样的需求,管理员可以看到所有数据,部门可以看到本部门的数据,组长可以看到自己组的数据,组员只能看到自己相关的数据. 一般人的做法是,根据不同的角色通过if...el ...

  9. SQL语句中的select高级用法

    #转载请联系 为了更好的了解下面的知识点,我们先创建两张表并插入数据. # 学生表 +----+-----------+------+--------+--------+--------+------ ...

随机推荐

  1. C# JSON学习之序列化与反序列化

    在我的个人计划中,学习制作c#下的曲线平台属于下半年的重点.关于前后端的数据传递-json数据的学习很有必要,通过一个例子来加深自己的理解. 新建一个console控制台程序,通过导入NewstonS ...

  2. 租了一台华为云耀云服务器,却直接被封公网ip,而且是官方的bug导致!

    小弟在博客园也有十多个年头了,因为离开了.net圈子,所以很少发文,今天可算是被华为云气疯了.写下这篇文章,大家也要注意自查一下,避免无端端被封公网ip. 因为小弟创业公司业务发展,需要一个公网做宣传 ...

  3. CTF之隐写总结

    目测要更很久,因为今年有一件非常重要的事要完成,希望一切顺利  All The Best.

  4. 一、Ocelot简单概述

    以下只是本人学习过程的整理 Ocelot官网:http://threemammals.com/ocelot 说明文档:https://ocelot.readthedocs.io/en/latest/ ...

  5. 『Java』成员内部类 匿名内部类

    成员内部类 成员方法类是定义在一个类中的方法外的类,例如: public class Outer{ // 外部类 class Inner { // 内部类 // 内部类成员 } // 外部类成员 } ...

  6. PaddlePaddle之猫狗大战(本地数据集)

    新手入门PaddlePaddle的一个简单Demo--猫狗大战 主要目的在于整体了解PP用卷积做图像分类的流程,以及最最重要的掌握自定义数据集的读取方式 猫狗数据集是从网络上下载到工作目录的. 本项目 ...

  7. UNIX环境高级编程APUE练习3.2-不用fcntl实现dup2的功能

    1 题面 编写与dup2功能相同的函数,要求不调用fcntl函数,并且要有正确的出错处理. 2 基本思路 不能用fcntl,能够返回一个文件描述符的只有open和dup.而open会创建一个新的文件表 ...

  8. .net core 响应的json数据驼峰显示问题。

    在.net core webapi中,默认响应的json数据是以驼峰显示的,即首字母小写的方式.如果让其正常显示,只需要在全局配置即可.代码如下图: 配置之后,响应数据就不会再以驼峰的形式展示了.而是 ...

  9. 使用sklearn中的fetch_mldata的错误情况以及可能可行的解决方法

    使用sklearn中的fetch_mldata的错误情况以及可能可行的解决方法 在notebook使用的时候出现了报错 from sklearn.datasets import fetch_mldat ...

  10. Xilinx约束学习笔记(一)—— 约束方法学

    <Xilinx约束学习笔记>为自己阅读 Xilinx 官方 UG903 文档后的学习笔记,大多数为翻译得来,方便大家学习. 1 约束方法学 1.1 组织约束文件 Xilinx 建议将时序约 ...