SQL数据查询语句
(一)单表查询。
1.选择表中若干的列
(1)查询指定的列
(2)查询全部的列
eg:SELECT *
FROM Student
(3)查询经过计算的值
eg:查询全体学生的姓名及出生年龄
SELECT Sname,2021-age
FROM Student;
2.选择表中的若干元组
(1)取消重复的行
eg:SELECT DISTINCT Sno
FROM SC;
(2)查询满足条件的元组(WHERE)
表 常用的查询条件
查询条件 |
谓词 |
比较 |
=,>,<,>=,<=,!=,<>(不等于),!>,!<, |
确定范围 |
BETWEEN,AND,NOT BETWEEN AND |
确定集合 |
IN, NOT IN |
字符匹配 |
LIKE,NOT LIKE |
空值 |
IS NULL,IS NOT NULL |
多重条件 |
AND,OR,NOT |
2.1 比较大小
=,>,<,>=,<=,!=,<>(不等于),!>,!<, |
2.2确定范围
BETWEEN,AND,NOT BETWEEN AND |
eg:查询年龄不在20——23之间的学生姓名
SELECT Sname
FROM Student
WHERE age NOT BETWEEN 20 AND 23;
2.3确定集合
IN, NOT IN |
eg: SELECT Sname
FROM Student
WHERE Sdept IN ('cs','ma','is');
2.4字符匹配
2.4.1 %:任意长度的字符串
eg:查询所有姓柳的学生的姓名,学号。
SELECT Sname,Sno
FROM Student
WHERE Sname LIKE '刘%';
2.4.2 _:任意单个字符
eg:查询名字中只有两个字,且第一个字为钱的同学
SELECT Sname
FROM Student
WHERE Sname LIKE '钱_'
2.5涉及空值的查询
IS NULL,IS NOT NULL |
eg:查询所有有成绩的学生姓名,学号;
SELECT Sno
FROM SC
WHERE score IS NOT NULL;
2.6多重查询
AND,OR,NOT |
eg:省
BY子句
用户可以用ORDER BY子句对查询结果按照一个或多个属性列的升序(ASC)或(DESC)排列,默认值为升序。
eg:查询选修了三号课程的学生的学号及其成绩,并按照升序排序;
SELECT Sno,score
FROM sc
WHERE Cno='3'
ORDER BY Score ASC;
4.聚集函数
COUNT,SUM,AVG,MAX,MIN
BY
作用:将某一列或多列的值进行分组。值相等的为一组。分组后聚集函数将之作用于每一个组,即每一组有一个函数值。
eg:求各个课程号及其相应的选课人数
SELECT Cno,COUNT(SNO)
FROM SC
GROUP BY CNO;
解释:该语句对查询结果CNO进行分组,所有具有相同CNO的为一组。
注意:WHERE 子句于HAVING子句的区别在于作用对象不同。WHERE子句作用于基本表和视图。HAVING子句作用于组。WHERE子句不能用聚集函数作为表达式。
(二)连接查询
1.等值于非等值连接查询
当连接运算符为‘=’时
2.自身连接
例如:为COURSE取名两个表
course FIRST,course SECOND
条件:查询先修课程的先修课程
SELECT ,
FROM course first,course second
WHERE =;
3.外连接
SC于Student进行连接,以Student为主题,就算在Student中有空值,也希望挂起来
eg:SELECT ,Sname,sex,Cno,score
FROM Student LEFT OUTER JOIN SC ON (=)
4.多表连接
(三)嵌套查询
1.带有IN谓词的嵌套查询
2.带有比较运算符的子查询
3.带有ANY(SOME)或ALL谓词的子查询
eg:查询非计算机学科中比计算机学科系任意一个(比最大的年龄小就行)学生年龄小的学生姓名和年龄
SELECT Sname,age
FROM student
WHERE age<(SELECT age
FROM student
WHERE Sdept='cs')
AND Sdept <>'cs';
4.带有EXISTS谓词的子查询
不返回任何的数据,只产生逻辑值‘TRUE’FALSE
eg:查询选修了1号课程的学生姓名
SELECT Sname
FROM Student
WHERE EXISTS(SELECT*
FROM sc
WHERE Sno= AND cNO='1');
(五)集合查询
UNION INTERSECT EZCEPT
UNION 并集
INTERSECT 交集
EZCEPT 差集
(六)SQL的索引
1.索引的作用:书本的目录
索引的分类
(1).B-tree索引
(2).Hash索引
(3).GiST索引
(4).GIN索引
2.创建索引
create index 索引名称 on 表名(列名);
create index student-s on student(sname);
3.删除索引
drop index 索引名称;
drop index student-s;
4.索引的优点:提高数据的查询速度
加速表与表的连接
索引的缺点:创建和维护索引需要耗费时间
需要占用磁盘资源
(七)数据库视图的介绍
1.视图的含义:从一张表或者多张表中导出的数据内容,数据与多张真实存在的表进行关联,屏蔽了底层查询数据的细节
2.视图的创建:
create view 视图名 as select 列名1,列名2.。。
from 表名
where 条件
3.视图删除
drop view 视图名
4.视图的作用:简单化 安全感性 逻辑数据独立性
(八)数据插入
一;
into 表名 values(插入的内容);
2.向指令字段插入数据:
insert into 表名(插入的内容)values(对应的字段);
二;批量数据插入语句
into 表名 (属性名) values (列表值);
2.使用select语句批量插入数据
insert into 表名1 (属性名称) select (属性值) FROM 表名2 WHERE (查询条件);
三:数据删除操作
from 表名 where 删除数据的条件
2.删除所有数据:delete from 表名;
3.使用select查询语句清空数据:truncate table 表名;
四;主键和外键地方介绍
1.列级约束:字段 primary key(不需要有主键名)
eg: id int primary key(将id设置为主键)
2.主键的作用:字段的值是唯一的
3.表级约束(需要有主键名):放在所有字段的后面
constraint 主键名 primary key (设置为主键的字段)
eg: constraint 主键名 primary key (id)