数据库标准语音SQL,嵌套查询


黄沙百战穿金甲,不破楼兰终不还。 —王昌龄的《从军行七首·其四》


1 查询

SELECT [ALL|DISTINCT] <目标列表表达式>[,<目标列表表达式>]...
FORM <表名或视图名>[,<表名或视图名>] 
[WHERE <条件表达式>]
[GROUP BY<列名> [HAVING <条件表达式>]]
[ORDER BY <列名2>[ASC| DESC]]
嵌入算术表达式
SELECT name,2016-age FROM Student 
去掉重复行(默认为 ALL)
SELECT DISTINCT age FROM Student
选择
SELECT name,age FROM Student WHERE age<20 
确定范围
SELECT name,age FROM Student WHERE age  BETWEEN 20 AND 23
SELECT name,age FROM Student WHERE age NOT BETWEEN 20 AND 23
确定集合
SELECT name,age FROM Student WHERE age NOT IN(19,20,23)
字符匹配 "%"任意长度 "_"任意当个字符
SELECT * FROM Student WHERE name LIKE '刘%'
SELECT * FROM Student WHERE name LIKE '刘_'
SELECT * FROM Student WHERE name LIKE '_刘%'
SELECT * FROM Student WHERE name MOT LIKE '刘%'
去除通配符的影响"\" 匹配DB_Design字符
SELECT * FROM Student WHERE name 'DB\_Design' ESCAPE'\'
涉及空值的查询
SELECT * FROM Student WHERE score IS NOT NULL
多重查询
SELECT * FROM Student WHERE Sdept="信工系" AND age<20
排序ORDER BY ASC升序 DESC降序
SELECT * FROM Student ORDER BY mumber,age DESC 按mumber降序排列,相同按年龄降序排列

聚集函数(只能用于SELECT子句和 group by 中的 having 子句)
COUNT(*) 统计元组个数
COUNT([DISTINCT|ALL] <列名>) 统计一列中值的个数
SUM([DISTINCT|ALL]<列名>) 计算一列值的总和(必须此列为数组型)
AVG([DISTINCT|ALL]<列名>) 计算一列值的平均值(必须此列为数组型)
MAX([DISTINCT|ALL]<列名>) 求一列值的最大值
MIN([DISTINCT|ALL]<列名>) 
SELECT SUM(Score) FROM Student WHERE id=2010
SELECT AVG(Sage) FROM Student GROUP BY Sdept;//求同一个系学生的平均年龄
SELECT * FROM Student ORDER BY Sno DESC limit arg1,arg2

arg1 用于指定查询记录的起始位置,arg2 用于指定查询数据所返回的记录数。


“Orders” 表

O_Id  OrderDate OrderPrice  Customer
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

查找订单总金额少于 2000 的客户。

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

查找客户 “Bush” 或 “Adams” 拥有超过 1500 的订单总金额。

SELECT Customer,SUM(OrderPrice) FROM Orders
WHERE Customer='Bush' OR Customer='Adams'
GROUP BY Customer
HAVING SUM(OrderPrice)>1500

示例-jion

由内连接和外连接之分。

内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现
外连接: 包括
(1)左外连接(左边的表不加限制)
(2)右外连接(右边的表不加限制)
(3)全外连接(左右两表都不加限制)

3、自连接(连接发生在一张基表内)

有时为了得到完整的结果,我们需要从两个或更多的表中获取结果。我们就需要执行 join。

数据库中的表可通过键将彼此联系起来。主键(Primary Key)是一个列,在这个列中的每一行的值都是唯一的。在表中,每个主键的值都是唯一的。这样做的目的是在不重复每个表中的所有数据的情况下,把表间的数据交叉捆绑在一起。

表:tb_purview
这里写图片描述
表:tb_manager
这里写图片描述

select m.*,p.sysset,p.readerset,p.bookset,p.borrowback,p.sysquery
from tb_manager m left join tb_purview p on m.id=p.id
where m.name= 'mr'

结果:
这里写图片描述

下面列出了您可以使用的 JOIN 类型,以及它们之间的差异。

(inner)JOIN: 如果表中有至少一个匹配,则返回行
LEFT(outer) JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行

mysql 不支持 FULL JOIN 查询,可以使用 UNION 合并结果集

SELECT * FROM Student right JOIN  SC ON Student.Sno=SC.Sno
UNION
SELECT * FROM Student left  JOIN  SC ON Student.Sno=SC.Sno

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

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

2 更新

UPDATE table_name
SET <column_name>=<expression>
    [...,<last column_name>=<last expression>]
[WHERE <search_condition>]
UPDATE Student 
SET Sage=22
WHERE Sno='291939'

所有学生年龄加一

UPDATE Student 
SET Sage=Sage+1

带子查询的修改语句,涉及 两个表

UPDATE SC
SET Grade=0
WHERE Sno IN
    (SELECT Sno
     FROM Student 
     WHERE Sdept='CS')

3 删除

DELETE FROM <table_name>[WHERE <search condition>]
DELETE FROM Student WHERE Sno='2910039'
DELETE FROM Student

带子查询的删除语句,涉及两个表

DELETE 
FROM SC
WHERE Sno IN
    (SELECT Sno
    FROM Student 
    WHERE age=23)

4 插入

INSERT 
INTO<表名> [(<属性列1>[,(<属性列2>]...)]
VALUES(<常量1>[,<常量2>]....)
INSERT 
INTO Student(Sno,Sname,Sage)
VALUES('2012132','成小春'23)

插入子查询结果

INSERT 
INTO<表名> [(<属性列1>[,(<属性列2>]...)]
子查询
INSERT 
INTO Student(Sno,Avg_age)
SELECT Sno,AVG(Sage)
FROM Student
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值