1、SELECT DISTINCT 列名称 FROM 表名称
2、<> 不等于
3、SELECT TOP number|percent column_name(s) FROM table_name
sqlserver : top
mysql、oracle : select column_name from tab_name limit offset , rows
SELECT username FROM user LIMIT 4,10
如果 user 表中的数据记录超过14条的话,该例子将会返回符合结果的第 5-14 条记录(共 10 条),注意默认偏移量是从 0 开始的。
offset 参数如果省略,则默认为 0 ,即 LIMIT 10 等同于 LIMIT 0,10 (返回符合查询条件的前 10 条记录)。
db2 : select column_name from tab_name fetch first 10 rows only
4、SQL 通配符 : 可以替代一个或多个字符;必须与 LIKE 运算符一起使用
% 替代一个或多个
_ 替代一个 eg : SELECT * FROM Persons WHERE FirstName LIKE '_eorge'
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er'
[charlist] 字符列中的任何单一字符
eg:SELECT * FROM Persons WHERE City LIKE '[ALN]%' 从 "Persons" 表中选取居住的城市以 "A" 或 "L" 或 "N" 开头的人
[^charlist]或者[!charlist] 不在字符列中的任何单一字符
eg:SELECT * FROM Persons WHERE City LIKE '[!ALN]%'
从上面的 "Persons" 表中选取居住的城市不以 "A" 或 "L" 或 "N" 开头的人
5、BETWEEN 操作符(包头不包尾) 不同数据库用法不同
BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期
eg:以字母顺序显示介于 "Adams"(包括)和 "Carter"(不包括)之间的人
SELECT * FROM Persons WHERE LastName BETWEEN 'Adams' AND 'Carter'
6、连接
可以通过引用两个表的方式,从两个表中获取数据
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons, Orders
WHERE Persons.Id_P = Orders.Id_P
使用join
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P = Orders.Id_P
ORDER BY Persons.LastName
不同的 SQL JOIN:除了我们在上面的例子中使用的 INNER JOIN(内连接),我们还可以使用其他几种连接。
JOIN(INNER JOIN): 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行
INNER JOIN: 返回persons表存在且orders表也存在的数据
现在,我们希望列出所有人的定购。
您可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
LEFT JOIN:每条person中的数据对应orders中的数据(具体条数看是否person一条对应orders多条),不一定是persons有多少条数据,结果集就有多少条
左连接(LEFT JOIN)实例
现在,我们希望列出所有的人,以及他们的定购 - 如果有的话。
您可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
RIGHT JOIN:
右连接(RIGHT JOIN)实例
现在,我们希望列出所有的定单,以及定购它们的人 - 如果有的话。
您可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
FULL JOIN:
全连接(FULL JOIN)实例
现在,我们希望列出所有的人,以及他们的定单,以及所有的定单,以及定购它们的人。
您可以使用下面的 SELECT 语句:
SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
7、union/union all:
Union: 筛选掉重复的记录;按照字段的顺序进行排序;效率低
Union all:不筛选重复记录,不排序,效率高
对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录。
对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回。
从效率上说,UNION ALL 要比UNION快很多
所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用UNION ALL。
关键字写在两条sql语句之间:
eg1:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA
eg2:
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA
8、sql约束
UNIQUE 约束唯一标识数据库表中的每条记录。
UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
PRIMARY KEY 拥有自动定义的 UNIQUE 约束。
请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。
mysql : unique(id)
sqlserver: id int not null unique
命名及定义多列unique约束
constraint UN_id unique(id,name)
在已创建表上添加unique约束
alter table persons add unique(id)
为已创建表添加多个unique约束
alter table persons contraint UN_id unique(id,name)
9、sql 日期函数
Mysql:
Date():返回年月日
SELECT DATE( createTime ) FROM `t_user` WHERE id =1
2017-06-01
Time():返回时分秒
SELECT TIME( updateTime ) FROM `t_user` WHERE id =2
12:01:25
EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等
EXTRACT(unit FROM date)
Unit 值:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
DATE_ADD() 函数向日期添加指定的时间间隔
DATE_ADD(date,INTERVAL expr type)
date 参数是合法的日期表达式。expr 参数是您希望添加的时间间隔
Type 值:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
SECOND_MICROSECOND
MINUTE_MICROSECOND
MINUTE_SECOND
HOUR_MICROSECOND
HOUR_SECOND
HOUR_MINUTE
DAY_MICROSECOND
DAY_SECOND
DAY_MINUTE
DAY_HOUR
YEAR_MONTH
DATEDIFF(date1,date2)
SELECT DATEDIFF('2008-12-30','2008-12-29') AS DiffDate
DATE_FORMAT(date,format) format 规定日期/时间的输出格式
SELECT OrderId,DATEADD(day,2,OrderDate) AS OrderPayDate
FROM Orders
date 参数是合法的日期表达式。number 是您希望添加的间隔数;对于未来的时间,此数是正数,对于过去的时间,此数是负数。
SELECT DATEDIFF(day,'2008-12-29','2008-12-30') AS DiffDate
10、Having
SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500
11、mid()
MID 函数用于从文本字段中提取字符。
SELECT MID(column_name,start[,length]) FROM table_name
SELECT MID(City,1,3) as SmallCity FROM Persons
11、round()
ROUND 函数用于把数值字段舍入为指定的小数位数。
SELECT ROUND(column_name,decimals) FROM table_name
SELECT ProductName, ROUND(UnitPrice,2) as UnitPrice FROM Products