mysql-DQL

1.外键的补充

外键:连接多张表的关键列,用于保证数据一致性。
ALTER TABLE 从表 ADD CONSTRAINT 外键名 FOREIGN KEY(外键列名) REFERENCES 主表(外键对应的列名);
逻辑外键(推) 物理外键

DML语句

2.增加

INSERT INTO 表名
(字段名列表) VALUES(值列表);

增加多条数据

INSERT INTO 表名
(字段名列表) VALUES(值列表1),(值列表2),()…

3.修改

UPDATE
表名
SET
要修改的字段/列 = 修改的值,…
[WHERE 条件] # 如果不加where是进行全表更新

WHERE 后面可以接各种运算符 > < >= <= !=/<> = BETWEEN…AND… and or not

4.删除

DELETE FROM 表名 [WHERE 条件]

TRUNCATE 和 DELETE

DELETE 和 TRUNCATE都可以清空全表内容,但是Delete可以添加where条件。
DELETE删除会保留自增序列,但是TRUNCATE会清空。
DELETE不会影响事务,而TRUNCATE会结束事务。

– 准备基础数据

表创建

科目表

CREATE TABLE subject(
subjectNo INT PRIMARY KEY auto_increment COMMENT ‘科目编号’,
subjectName VARCHAR(50) COMMENT ‘科目名称’,
classHour INT COMMENT ‘课时’,
gradeId INT COMMENT ‘年级编号’
);

年级表

CREATE TABLE grade(
gradeId INT PRIMARY KEY auto_increment COMMENT ‘年级编号’,
gradeName VARCHAR(50) COMMENT ‘年级名称’
);

成绩表

CREATE TABLE result(
studentNo INT COMMENT ‘学生编号’,
subjectNo INT COMMENT ‘科目编号’,
examDate Datetime COMMENT ‘考试时间’,
studentResult DOUBLE COMMENT ‘考试成绩’
);

添加

INSERT INTO student
(studentNo,loginPwd,studentName,sex,gradeId,identityCard)
VALUES(1000,‘111111’,‘郭靖’,‘男’,1,‘23333333’),
(1001,‘123456’,‘李文才’,‘女’,2,‘32222222’),
(1003,‘222222’,‘贾斯文’,‘男’,3,‘33333333’);

科目

INSERT INTO subject
(subjectName,classHour,gradeId)
VALUES(‘高等数学’,110,1),
(‘C语言’,100,2),
(‘大学物理’,130,3);

年级

INSERT INTO grade
(gradeName)
VALUES(‘大一’),
(‘大二’),
(‘大三’);

成绩

INSERT INTO myschool.result
(studentNo,subjectNo,examDate,studentResult)
values(1000,1,‘2019-03-22’,94),
(1001,2,‘2019-03-20’,85),
(1000,3,‘2019-03-24’,60);

– DQL 数据查询语言 SELECT
– 1. 掌握MySQL的查询语句(基本完整语法)
/*
SELECT [ALL查询全部 | DISTINCT去重]

决定查询哪些列信息

{ 全列* | table.* | [ table.field1 [ as alias1] [, table.field2 [as alias2]][, …]] }

决定从哪些表中查询数据

FROM table_name [ as table_ alias ]
[ left|out|inner join table_name2 ] # 联合/连接查询
[ WHERE … ] # 指定结果需满足的条件
[ GROUP BY …] # 指定结果按照哪几个字段来分组
[ HAVING …] # 过滤分组的记录必须满足的次要条件
[ ORDER BY… ] #指定查询记录按一个或者多个条件排序
[ LIMIT { [ offset,] row_count | row_count OFFSET offset }] ; #指定查询的记录从哪条至哪条
*/

查询所有学生的所有信息

SELECT
* # 决定查询哪些列
FROM
student; # 不写where 表示决定查询所有学生

为老师查询学生们的通讯录 姓名 性别 手机号 邮箱 地址

SELECT
student.studentName,student.sex,address,phone,email
FROM
student;

要求查询上述信息 并将信息以中文展示

SELECT
studentName AS ‘学生姓名’, sex AS ‘性别’,address AS 地址,
phone ‘手机号’,email ‘邮箱’
FROM
student;

查询所有学生的性别 ALL默认表示全部查询

SELECT
ALL stu.sex
FROM
student AS stu;

DISTINCT 会将所查询的列信息进行筛选 去除重复的

SELECT
DISTINCT stu.sex
FROM
student AS stu;

查询课时在100-120之间的科目名称

SELECT
subjectName,classHour
FROM
subject
WHERE
#classHour >= 100 AND classHour <= 120;
classHour BETWEEN 100 AND 120;

查询手机号为null的学生信息 如果查询null值/非null 必须用is 或 is not

SELECT
studentName
FROM
student
WHERE
#phone = null;
phone IS NOT NULL;
– 2.掌握模糊查询

LIKE

查询姓贾的学生姓名和性别

SELECT
studentName,sex
FROM
student
WHERE
studentName LIKE ‘贾%’;

查询姓贾的但是是两个字姓名的学生信息

SELECT
*
FROM
student
WHERE
studentName LIKE ‘贾_’;

% 匹配0个或任意一个/多个字符

_ 匹配任意一个字符

查询地址包含西城信息的

SELECT
*
FROM
student
WHERE
address LIKE ‘%西城%’;

in范围查询

查询学号为1001和1003的学生信息

SELECT
*
FROM
student
WHERE
studentNo = 1001 OR studentNo = 1003;

查询学号为1001和1003的学生信息

SELECT
*
FROM
student
WHERE
studentNo IN(1001,1003);

– 3.理解连接查询的原理

当查询的数据需要来源多张表时,需要通过外键和连接运算符来查询信息。

连接查询分类

1.内连接(INNER JOIN) 显式内连接 隐式内连接 自连接

2.外连接(OUTER JOIN) 左外连接(LEFT [OUTER] JOIN) 右外连接(RIGHT [OUTER] JOIN)

– 4. 掌握内连接查询

显示内连接

查询科目名称和对应年级名称

SELECT
subjectName,gradeName
FROM
subject
INNER JOIN grade
ON subject.gradeId = grade.gradeId

用别名优化

SELECT
sb.subjectName,g.gradeName
FROM
subject AS sb
INNER JOIN grade AS g
ON sb.gradeId = g.gradeId

三张表联查

查询学生的姓名、科目名称、成绩

SELECT
stu.studentName,sub.subjectName,r.studentResult
FROM
result r
INNER JOIN student stu
ON r.studentNo = stu.studentNo
INNER JOIN subject sub
ON r.subjectNo = sub.subjectNo;

(常用)隐式内连接实现上述功能 可理解为是交集 如果有不存在的外键信息 则无法查询到

SELECT
stu.studentName,sub.subjectName,r.studentResult
FROM
student stu,subject sub,result r
WHERE
stu.studentNo = r.studentNo AND sub.subjectNo = r.subjectNo;

– 5.掌握外连接查询(左外连接)

左外连接(LEFT [OUTER] JOIN)

以左表为主 左边的表信息全部查询出来 右边的表信息进行匹配对应 如果没有相对应的会以Null显示

SELECT
sb.subjectName,g.gradeName
FROM
subject AS sb
LEFT JOIN grade AS g
ON sb.gradeId = g.gradeId

右外连接(RIGHT [OUTER] JOIN)

SELECT
sb.subjectName,g.gradeName
FROM
subject AS sb
RIGHT JOIN grade AS g
ON sb.gradeId = g.gradeId

– 6.理解自连接

查询游戏名称 并 将其分类名称查询出来

SELECT
c1.categoryName AS 游戏名称,c2.categoryName 分类名称
FROM
category c1,category c2
WHERE
c1.pid = c2.id
#AND c1.pid IS NOT NULL;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值