SQL数据查询语句

时间:2025-02-07 08:41:43

  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)