数据库SQL语句

Day2 数据库SQL语句

一、查询

1、条件查询

# 查询所有学生信息
SELECT
	* 
FROM
	student;
# 查询学号、姓名、身份证号
SELECT
	StudentNo AS 学号,
	StudentName AS 姓名,
	IdentityCard AS 身份证号 
FROM
	student;# AS可省略
# 查询年级为2的学生信息
SELECT
	* 
FROM
	student 
WHERE
	GradeId = 2;
# 查询年级为2和3的学生信息
SELECT
	* 
FROM
	student 
WHERE
	GradeId = 2 
	OR GradeId = 3;# 方法1
SELECT
	* 
FROM
	student 
WHERE
	GradeId IN ( 2, 3 );# 方法2
# 查询年级为3的女学生(1,男 2,女)
SELECT
	* 
FROM
	student 
WHERE
	GradeId = 3 
	AND Sex = 2;
# 查询出生日期在1985-2024年的学生信息
SELECT
	* 
FROM
	student 
WHERE
	BornDate > '1985-01-01' 
	AND BornDate < '2024-12-31';# 方法1
SELECT
	* 
FROM
	student 
WHERE
	BornDate BETWEEN '1985-01-01' 
	AND '2024-12-31';# 方法2 (数值/时间)

2、模糊匹配

# like模糊查询
# %前后匹配所有  _一个字符
# 查询姓李的学生信息
SELECT
	* 
FROM
	student 
WHERE
	StudentName LIKE '李%';
# 查询籍贯在中关村的学生信息
SELECT
	* 
FROM
	student 
WHERE
	Address LIKE '%中关村%';
# 查询姓名为俩字的学生信息
SELECT
	* 
FROM
	student 
WHERE
	StudentName LIKE '__';

3、聚合查询

# 聚合查询
# 总记录数COUNT()、求和SUM()、平均分AVG()、最大值MAX()、最小值MIN()
# 查询学生总数
SELECT
	COUNT(*) 
FROM
	student;
# 查询学生成绩总和
SELECT
	SUM( StudentResult ) 
FROM
	result;
# 查询学生成绩的平均分
SELECT
	AVG( StudentResult ) 
FROM
	result;
# 查询学生成绩的最大值
SELECT
	MAX( StudentResult ) 
FROM
	result;
# 查询学生成绩的最小值
SELECT
	MIN( StudentResult ) 
FROM
	result;

4、分组聚合

# 分组聚合
# 分组后只能查询分组字段和聚合函数
# 查询男女学生人数
SELECT
	Sex 性别,
	COUNT(*) 总人数 
FROM
	student 
GROUP BY
	Sex;
# 查询每个年级男女学生人数
SELECT
	GradeId 年级,
	Sex 性别,
	COUNT(*) 总人数 
FROM
	student 
GROUP BY
	GradeId,
	Sex 
ORDER BY
	GradeId,
	Sex;
# 分组聚合后的聚合筛选用HAVING
# 查询每个年级男女学生人数大于8人
SELECT
	GradeId 年级,
	Sex 性别,
	COUNT(*) 总人数 
FROM
	student 
GROUP BY
	GradeId,
	Sex 
HAVING
	COUNT(*) > 5 
ORDER BY
	GradeId,
	Sex;
# 查询每个科目最高与最低的成绩信息
SELECT
	SubjectNo 科目,
	MAX( StudentResult ) 最高成绩,
	MIN( StudentResult ) 最低成绩 
FROM
	result 
GROUP BY
	SubjectNo;

5、排序

# 排序 ORDER BY
# 升序(默认): ASC 降序: DESC
# 对成绩表中的成绩升序/降序排序
SELECT
	* 
FROM
	result 
ORDER BY
	StudentResult DESC;
# 多列排序: 优先按照第一个排序,第一个相同则按照第二个排序
SELECT
	* 
FROM
	student 
ORDER BY
	GradeId,
	BornDate DESC;
# NULL值判断
# IS NULL 或 IS NOT NULL
SELECT
	* 
FROM
	student 
WHERE
	LoginPwd IS NOT NULL;

6、子查询

# 子查询
# 建议用IN
# 查询'大一'学生的信息
SELECT
	* 
FROM
	student 
WHERE
	GradeId = ( SELECT GradeID FROM grade WHERE GradeName = '大一' );
# 查询'大一''大二'学生的信息
SELECT
	*
FROM
	student
WHERE
	GradeId IN ( SELECT GradeID FROM grade WHERE GradeName IN ('大一','大二') );

# 查询学生表前3条记录
SELECT
	* 
FROM
	student 
	LIMIT 3;

# 分页
# LIMIT 从第几页开始查((当前页-1)*每页显示的记录数), 每页显示的记录数
SELECT
	* 
FROM
	student 
	LIMIT 6,
	3;

# 常用数据类型
# SQL: INT BIGINT CHAR(指定长度) VARCHAR(指定长度) TEXT DATE TIME DATETIME DOUBLE

# 主表:理论上不可随便删除
# 子表:理论上可以随便删除
# 主表的主键 = 子表的外键
# 表与表的关联是通过子表的外键

# 一对一
# 一对多
# 多对多 额外的关联表

7、连接

# 连接查询
# INNER JOIN内连接: 返回有关系的数据
# 查看学生信息与年级信息

SELECT
	* 
FROM
	student
	INNER JOIN grade ON student.GradeId = grade.GradeID;

SELECT
	stu.StudentNo,
	stu.StudentName,
	stu.Sex,
	stu.GradeId,
	gra.GradeName 
FROM
	student AS stu
	INNER JOIN grade AS gra ON stu.GradeId = gra.GradeID;
	
SELECT
	stu.StudentName,
	sub.SubjectName,
	res.StudentResult 
FROM
	student AS stu
	INNER JOIN result AS res ON stu.StudentNo = res.StudentNo
	INNER JOIN `subject` AS sub ON res.SubjectNo = sub.SubjectNo 
ORDER BY
	stu.StudentName;
	
# 外连接
# 查询指定表的所有记录,未关联的字段以NULL填充
# LEFT JOIN:左外连接
# RIGHT JOIN:右外连接
# 查询学生所有记录及连接信息
SELECT
	stu.StudentNo,
	stu.StudentName,
	stu.Sex,
	stu.GradeId,
	gra.GradeName 
FROM
	student AS stu
	LEFT JOIN grade AS gra ON stu.GradeId = gra.GradeID;

# 书写顺序 select  from  inner join  where  group by  having  order by  limit
# 执行顺序 from  inner join  where  group by  having  select  order by  limit

# 自连接查询
# 主
SELECT
	id, name
FROM
	my_department;
# 从
SELECT
	id, name, fu_id
FROM
	my_department;

SELECT
	zhu.name, 
	cong.name
FROM
	my_department zhu
	INNER JOIN my_department cong ON zhu.id = cong.fu_id;

二、增删改

1、新增

# 增删改
# 新增
INSERT INTO SUBJECT
VALUES
	( NULL, '玄学', 50, 1 );
# 插入部分列需要注意,主键是否自增,是否必填字段。
INSERT INTO SUBJECT ( SubjectName )
VALUES
	( '神学' );
# 批量新增
INSERT INTO SUBJECT ( SubjectName )
VALUES
	( '政治' ),
	( '哲学' ),
	( '文学' );

2、删除

# 删除
# 全表数据删除
DELETE 
FROM
	my_department;
# 根据主键删除
DELETE 
FROM
SUBJECT 
WHERE
	SubjectNo = 18;
# 批量删除
DELETE 
FROM
SUBJECT 
WHERE
	SubjectNo IN ( 19, 20 );
	
DELETE 
FROM
SUBJECT 
WHERE
	SubjectName = '哲学' 
	OR SubjectName = '文学';

3、修改

# 修改
# 全表数据修改
# 将科目表中的课时全部改成120,年级改成2
UPDATE
	`subject`
SET
	ClassHour = 120,
	GradeID = 2;

# 根据主键修改
# 修改学号为10067 的名字为吴迪,生日为1986-12-31 08:08:08
UPDATE
	student
SET
	StudentName = '吴迪',
	BornDate = '1986-12-31 08:08:08'
WHERE StudentNo = 10066;
# 批量修改
UPDATE
	student
SET
	StudentName = '小刚',
	BornDate = '2006-12-31 08:08:08'
WHERE StudentNo IN (1001,1002);
# 修改所有北京与上海的学生信息
UPDATE
	student
SET
	StudentName = '小白',
	BornDate = '2026-12-31 08:08:08'
WHERE
	Address LIKE '北京%' OR Address LIKE '上海%';

posted @ 2026-04-19 22:01  愛摸鱼的猫  阅读(15)  评论(0)    收藏  举报