自己的一点笔记
From 给出将用到的条件
Where 过滤满足条件的行
Group by 将具有相同属性值的行分成组
Having 过滤满足条件的组
Order by 指定查询结果的顺序
假如要寻找所有的列,用 * 表示所有列
可用distinct 消除重复
行选择(where子句)
比较(comparison)
范围(range)
成员关系(set membership)
模式匹配(pattern match)
空(null)
= 等于 <> 不等于 != 不等于(方言)
< 小于 <=小于等于
> 大于 >=大于等于
顺序从左到右
首先记括号内的子表达式的值
not优先于and和or
and优先于or
假如要查找或 就用or
范围用 between and
不能表示的话直接用and
模式比配作为查找条件(like/not like)
Address like ‘H%’意味着第一个字符必须是H,后面的字符不限制
Address like ‘H____’意味着字符串正好四个字符,第一个是H
Address like ‘ %e’ 意味着一个字符序列,长度最小是1,最后一个字符是e
Address like ‘%Glasgow%’意味着一个包含字符串Glasgow的任意长度序列
Address like ‘H%’意味着字符串的第一个字符不能为H
如果要筛选空白的内容 用null
Select clientNo, viewDate
Form viewing
Where propertyNo = ‘PG4’ and comment is null;
反之就用 is not null
排序用order by 降序用DESC 升序用ASC
当多个原素进行排序时,需要考虑次序,排在前方的先进行排序,例如:order by type, rent DESC;
五个聚集函数
Count 返回制定列中数据的个数
Sum 返回制定列中数据的总和
Avg 返回制定列中数据的平均数
Min 返回制定列中数据的最小值
Max 返回制定列中数据的最大值
这些函数只对表中的单个列进行操作
group by子句
找出工作在每个分公司的员工人数和他们工资的总和
Select branchNo, count(staffNo) as myCount, sum(salary) as mySum
From Staff
Group by branchNo
Order by branchNo;
1.sql根据分公司编号将员工分不同的组,每一组中,所有的员工都有相同的分公司编号
2.每一组中sql计算员工的人数,并计算出salary列的汇总以便得到员工薪水的总和,sql在查询结果中为每一组生成一个单独的汇总行
3.最后查询结果按分公司的编号branchNo的升序排列
Having 可用于进行下一步的约束
Select branchNo, count(staffNo) as myCount, sum(salary) as mySum
From Staff
Group by branchNo
Having count(staffNo) > 1
Order by branchNo;
相当于加了约束条件,只找出人数超过一个人的分组
子查询
列出位于‘163 Main St’的分公司中工作的员工的情况
Select staffNo, fName, IName, position
From Staff
Where brachNo = (Select branchNo
From Branch
Where street = ‘163 Main St’);
子查询就是嵌套查询
Any和all
any和all 都适用于单个列子查询 all需要所有的条件全部满足,any只需要数个条件的某个条件满足就可以了。
多表查询
用From子句链接多个表进行查询。From子句链接多个表名,如何用,连接。通常还要用where子句来表明连接列
找前五项 limit 5
找5 - 10 limit 5 offset 5;
Sql标准提供了下列可供选择的方式来制定连接:
FROM Client c JOIN Viewing v ON c.clientNo = v.clientNo
FROM Client JOIN Viewing USING clientNo
FROM Client NATURAL JOIN Viewing
菜鸟编程JOIN 大全,点击URL查看 里面有图解。
内连接就是把两个表相同的部分联系一起
左连接就是把左边的表作为基准,然后对应右边的表,右边没有对应的就是用null填充
右连接就是把左连接反过来
交叉连接就是笛卡尔乘积方法
一张图看懂 SQL 的各种 JOIN 用法www.runoob.comInsert 可以帮助插入行
insert into 假如要插入一行玩具总动员4 例如:INSERT INTO movies VALUES (4, "Toy Story 4", "El Directore", 2015, 90);
Update 可以帮助更新表格的内容
假如Both the title and director for Toy Story 8 is incorrect! The title should be "Toy Story 3" and it was directed by Lee Unkrich 并且ID = 11
可以用update先找到表格的名字,然后再选择要更新的内容,最后用where加上位置确定条件
例如:
Update movies
Set title = ’Toy Story 3’, director = ‘Lee Unkrich’
Where id = 11;
Delete 可以帮助删除表格
Delete from 表格名
where 删除条件
例如:
Delete from movies
Where year <= 2005;
Create table可以创建表格 例如:
CREATE TABLE movies ( id INTEGER PRIMARY KEY, title TEXT, director TEXT, yearINTEGER, length_minutes INTEGER);
对于列的编辑 参见菜鸟编程:
SQL ALTER TABLE 语句www.runoob.com直接删除表格 DROP TABLE 表格名
超关键字:能唯一标示关系中的每一个元组。
候选关键字:把超关键字减化,简化到再减化就不可以作为超关键字了,就是候选关键字。
主关键字:被选用与唯一识别关系中各元祖的候选关键字。
比如学号 老师 科目 成绩
学号和科目加上任何字段都是超关键字,学号和科目就是两个候选关键字,学号加上科目就是主关键字
外关键字:假如A表的主关键字被包含到了B表中,那么A表的主关键字就是B表的外关键字