导航
- 1. 查询语法
- 2.子句
- 3.主键约束词汇
1. 查询语法
SELECT [select选项]
字段列表[字段别名]/*
FROM 数据源
[WHERE 子句]
[GROUP by子句 ][HAVING 子句][ORDER BY 子句][LIMIT 子句];
--sql语句中关键字应该用大写字母
--单个查询
SELECT p1 FROM table
--多个查询
SELECT p1,p2 FROM table
--去重查询:去除重复行
SELECT DISTINCT(p1) FROM table
--条件查询:可拓展为很复杂的判断,如where继续嵌套查询;
--假如想用select使用函数的字段筛选,可以用having子句
SELECT p1 FROM table WHERE p1=1
--函数查询:在查询字段套上函数,如SUM、COUNT、标量值函数等
SELECT function(列) FROM 表
SELECT SUM(IIF(category="class1",num,0)) Cat FROM table
--多表查询
--多列子查询
SELECT q1,p2 FROM (SELECT p1 q1,p2 FROM table)
--左连查询,返回table_1和table_2匹配上的行
SELECT p1 FROM table_1
LEFT JOIN table_2
ON table_1.p1=table_2.p1
参数查询
①用户输入的查询语句为:
SELECT * FROM Customers WHERE ID = ${ID};
②从客户端动态取到的 ID 数值为: 1;
③根据参数值产生新的查询语句:
SELECT * FROM Customers WHERE ID = 1
实际上实际的工程经验中,因为查询涉及表量多,字段判断复杂,许多查询由嵌套加函数综合编写,需要不断积累经验。
下面再讲一下 FROM后面的子句
2.子句
- GROUP BY
GROUP BY 语句用于结合合计函数,根据一个或多个列对结果集进行分组。
以下为例,表中column_name相同的字段对应的行会合并起来。
若是多字段分组,就会把多字段同时完全一致的合成一个小组。
应用场景:
常常把group by 做统计工作,对每个分组中的数据应用聚合函数(COUNT,SUM, AVG,etc)
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
- HAVING
有时候我们想用合计函数算的字段去条件查询,但是WHERE 关键字无法与合计函数一起使用。
这时HAVING子句就可以帮忙。
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value
应用场景:
有时我们用GROUP BY 和合计函数做分组合计,在这个基础上再用HAVING子句来做条件查询。
- ORDER BY
ORDER BY 语句用于根据指定的列对结果集进行排序,默认升序,有需要可加上关键字DESC做降序排序;
也可以一个降序一个升序,但需要在排序字段后都加关键字(DESC或ASC)。
--从order表中查询,且排序先以Word字段的字母进行排序,然后在此基础上用Num数字进行排序
SELECT Word, Num FROM Orders
ORDER BY Word, Num DESC
- LIMIT
LIMIT子句用作限制select返回的行数,部分数据库支持该语句,如MySQL
3.主键约束词汇
可用作约束主键检索
CONSTRAINT [PK_dimTime] PRIMARY KEY CLUSTERED
(
#ASC→主键 属性→ID
[lngTimeID] ASC)
#index:指定索引节点行数≥2 ;
#NORECOMPUTE:不自动更新,手动执行不带他的子句PDATESTATISTICS命令 ;
#DUP_KEY:包惟一约束插入重复数据时,
#选择时:返错,跳过继续执行、没选择时返错,rollback插入语句。
#locks:是否允许行/页面 锁
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = O
N, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY])
ON [PRIMARY]
小思考题:
医院有张源表,
table_1(记录病人入院数据),字段有 patient_Id, report_Date,dept_Code,doct_Code;
现在需要做一个入院周报,根据输入时间参数的不同,统计每个部门的入院人数情况。
答案
SELECT
p.dept_Code 部门,
COUNT(p.dept_Code) 入院人数
FROM table_1 p
WHERE
p.report_Date>=${begain_Time}
p.report_Date<=${end_Time}
GROUP BY p.dept_Code
ORDER BY 入院人数 DESC