SQL语句编写

 本章主要介绍SQL中简单编写——参考W3school

一、查询Select

1. distinst--截然不同的,查询结果中中不存在相同的列

CompanyOrderNumber
IBM 3532
W3School 2356
Apple 4698
W3School 6953
select distinct Company from Orders;
Company
IBM
W3School
Apple
W3School

 2. order by *** desc / asc--分类排序,默认升序asc

select Company, OrderNumber from orders order by Company desc, OrderNumber asc;
CompanyOrderNumber
W3School 2356
W3School 6953
IBM 3532
Apple 4698

 二、插入 Insert

insert into table_name values (值1, 值2 ...);
insert into table_name(列1,列2...) values (值1,值2...);

 三、更新 Update

update table_name set 列名称 = 新值 where 列名称 = 某值;
update Person set FirstName = 'Fred', Address = 'Nanjing' where LastName = 'Wilson' ;

 四、删除 Delete

delete from table_name where 列名称 = 值;

 五、进阶

1. top:用于规定返回记录的数目

select top 2 * from table_name;//取前两条记录
select top 50 percent * from table_name;//取前百分之五十记录

 2.通配符

通配符描述
% 替代一个或多个字符
_ 仅替代一个字符
[charlist] 字符列中的任何单一字符

[^charlist]或者[!charlist]

不在字符列中的任何单一字符
SELECT * FROM Persons WHERE FirstName LIKE '_eorge';
SELECT * FROM Persons WHERE LastName LIKE 'C_r_er';
SELECT * FROM Persons WHERE City LIKE '[ALN]%';//选取居住的城市以 "A" 或 "L" 或 "N" 开头的人
SELECT * FROM Persons WHERE City LIKE '[!ALN]%'//选取居住的城市不是以 "A" 或 "L" 或 "N" 开头的人

 3. in:允许我们在WHERE子句中规定多个值

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

 

4. between:在 WHERE 子句中使用,作用是选取介于两个值之间的数据范围

SELECT column_name(s)
FROM table_name
WHERE column_name
BETWEEN value1 AND value2;

  NOT BETWEEN:获取范围之外的数据

5. as:别名

SELECT po.OrderID, p.LastName, p.FirstName
FROM Persons AS p, Product_Orders AS po
WHERE p.LastName='Adams' AND p.FirstName='John'

 

6. join

"Persons" 表:

Id_PLastNameFirstNameAddressCity
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_OOrderNoId_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

① INNER JOIN:两表共同部分

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
INNER JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

② LEFT JOIN:关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
LEFT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  

  ③RIGHT JOIN:关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
RIGHT JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
    34764

④ FULLJOIN: 只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
FROM Persons
FULL JOIN Orders
ON Persons.Id_P=Orders.Id_P
ORDER BY Persons.LastName
LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  
    34764

六、SQL函数

O_IdOrderDateOrderPriceCustomer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

1. AVG():平均数

  找到 OrderPrice 值高于 OrderPrice 平均值的客户

SELECT Customer FROM Orders
WHERE OrderPrice>(SELECT AVG(OrderPrice) FROM Orders)
Customer
Bush
Carter
Adams

2. COUNT():返回匹配指定条件的行数

SELECT COUNT(DISTINCT Customer) AS NumberOfCustomers 
FROM Orders
NumberOfCustomers
3

3. FIRST():返回指定的字段中第一个记录的值

SELECT FIRST(OrderPrice) AS FirstOrderPrice FROM Orders
FirstOrderPrice
1000

 4. LAST():返回指定的字段中最后一个记录的值。

 5. MAX()/MIN():返回一列中的最大/小值。NULL 值不包括在计算中。

SELECT MAX(OrderPrice) AS LargestOrderPrice FROM Orders
LargestOrderPrice
2000

6. SUM():返回数值列的总数(总额)。

7. GROUP BY():分组

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
CustomerSUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000

8. HAVING():在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000
CustomerSUM(OrderPrice)
Carter 1700

9. UCASE() / LCASE():字段的值转换为大/小写。

10. MID():从文本字段中提取字符。

SELECT MID(column_name,start[,length]) FROM table_name
//column_name    必需。要提取字符的字段。
//start    必需。规定开始位置(起始值是 1)。
//length    可选。要返回的字符数。如果省略,则 MID() 函数返回剩余文本。
//例如MID(name, 1, 3)就是返回满足条件的name的前三个字符

11. LEN():返回文本字段的长度。

12. ROUND():把数值字段舍入为指定的小数位数。

SELECT ROUND(column_name,decimals) FROM table_name;
//column_name    必需。要舍入的字段。
//decimals    必需。规定要返回的小数位数。

13. NOW():返回当前日期和时间。

14. FORMAT():用于对字段的显示进行格式化。

SELECT FORMAT(column_name,format) FROM table_name;
//column_name    必需。要格式化的字段。
//format    必需。规定格式。
例如 FORMAT(Now(),'YYYY-MM-DD')
输出 12/29/2008

 15. wherehere & having

  1. where后不能加聚合函数.
  2. where的搜索条件是在执行语句进行分组之前应用, having的搜索条件是在分组条件后执行的,即如果where和having一起用时,where会先执行,having后执行.
  3. where子句用来筛选 FROM 子句中指定的操作所产生的行。having子句用来从分组的结果中筛选行。GROUP BY 子句用来分组 WHERE 子句的输出。
  4. where可以用于select、update、delete和insert into values(select * from table where ..)语句中。having只能用于select语句中.
posted @ 2020-03-30 17:29  Qmillet  阅读(891)  评论(0)    收藏  举报