–【回顾DML】
INSERT INTO student
(stuName,stuPwd,gender,gradeld,address)
VALUES(‘张三’,‘123’,‘男’,1,‘北京西城’),
(‘王五’,‘123,’ ‘女’ 2,’ ‘北京西城’),
(‘田七’,‘123’,‘男’,3,‘北京宣武’);
–DQL(data query language) 数据查询语言
–它是SQL中最核心的部分!
–【1.掌握MYSQL的标准查询语句结构】
SELECT[ALL|DISTINCT]
{|表名,|表名,字段名,,【AS别名】}
FROM要查询的表名【AS别名】
[LEFT|RIGHT|INNER JOIN连接表名【AS别名】
WHERE查询条件;
–1.1 SELECT后 FROM前的这一块内容 它是用来筛选查询字段的
–简单理解就是你想查看那些信息 例如:我想查看student表中的学生名,学生年龄,学生性别信息
1.查看学生表中 的所有信息
不推荐写推荐写全字段名年列表
效率低
SELECTFROM student
2.查看学生表中的学生姓名和性别
SELECT stuName,gender FROM student;
1.2别名(比较常用)注意:此处使用中文只不过是方便你理解而已 后面不会采用写中文别名
AS关键字可以省略 ‘‘也可以省略
SELECT stu.stuName AS’姓名’,stu.gradeld + 1年级 FROM student stu;
如果SQL过长可以进行“美化”
目前个人推荐写法
SELECT
stuName AS ‘姓名’,
grade +1年级
FROM
student;
以前写法
SELECT
stuName AS ‘姓名’,gradeld + 1年级
FROM student;
1.3 去重(默认的)ALL所有的 全部
DISTINCT直接的 明显的(去重)
SELECT ALL stuName,gradeId FROM student;
DISTINCT用来在指定的程序字段值范围内 去除重复数据
SELECT DISTINCT stuName,gradeId FROM student;
SELECT DISTINCT stuName,gender,gradeId FROM student;
–1.4where查询条件
在修改和删除时有过 目的是为了防止修改/删除全表。
用于检索数据表中符合条件的记录的
简单理解: 上方的操作是用来筛选列的 where是用来筛选行的。
在where条件语句中 可以由一个或者多个逻辑表达式组成 结果一般为真或加
<关系/比较运算符和逻辑运算符>
SELECTFROM student
查询年级是大于1的学生信息
SELECTFROM student WHERE gradeId>1;
复杂条件的处理:逻辑运算符 与and或or非not
查询姓名为张三且性别为女的学生信息
SELECTFROM student WHERE stuName ='张三’AND gender =‘女’;
查询性别是女的 或者 年级为3 的
SELECTFROM student WHERE gender = ‘女’OR gradeId = 3;
查询性别不是女的
SELECTFROM student WHERE NOT gender = ‘女’;
SELECTFROM student WHERE gender <>‘女’;
SELECTFROM student WHERE gender !=‘女’;
特殊的比较运算符
IS NULL IS NOT NULL
查询地址为空的学生姓名 查询空千万记住不能使用=
SELECT stuName FROM student WHERE address IS NULL;
SELECT stuName FROM student WHERE address IS NOT NULL;
BETWEEN…AND 在 之间/范围内 它等价于>= and <=
查询年级在2-3之间的学生姓名
SELECT stuName FROM student WHERE gradeId >=2 AND gradeId <=3;
更加简洁
SELECT stuName FROM student WHERE gradeId BETWEEN 2 AND 3;
IN查询 在 内/里面
查询年级为1或年级为3的学生信息
SELECT * FROM student WHERE gradeId =1OR gradeId = 3;
更加简洁
SELECT * FROM student WHERE gradeId IN(1,3);
SELECTFROM student WHERE gradeId NOT IN(1,3);
【掌握模糊查询】LIKE像 一样 喜欢
%表示任意单个/多个字符 表示任意单个字符
查询姓为张的学生信息
SELECT * FROM student WHERE stuName LIKE’张%’;
查询姓张的两个字的学生信息
SELECT *FROM student WHERE stuName LIKE’张’;
查询名称中带有三的学生信息
SELECT *FROM student WHERE stuName LIKE’%三%’;
查询三是姓名第二个字符的学生信息
SELECT *FROM student WHERE stuName LIKE’_三%’;
[3.理解连接查询原理及掌握连接查询的使用】(多表连查)
连接查询:内连接查询,外连接查询 {自连接查询}
内连接:显示内连接,隐式内连接
查询学生的姓名和所在年级
SELECT stuName,gradeIdFROM student ;
采用显示内连接【推荐给多表起别名 区分清楚 防止出现模糊不清错误】
内连接可以理解为交集
SELECT
stu.stuName,g.gradeName
FROM
student stu
INNER JOIN grade g
ON stu.gradeId = g.gradeId; #关联条件
采用隐式内连接查询 笛卡尔积
SELECT
stu.stuName,g.gradeName
FROM
student stu,grade g
SELECT
stu.stuName,g.gradeName
FROM
student stu,grade g
WHERE
stu.grade = g.gradeId;
查询所有的学生名 课程名称 考试成绩
SELECT
stu.stuName,sub.subjectName,r.result
FROM
student stu,subject
sub,result r
WHERE
stu.stuId = r.stuld
AND
sub.subjectld = r.subjectld;
外连接:左外连接,右外连接
查询学生的姓名和所在年级
采用左外连接 以左表为主 LEFT JOIN前面的就是左表
SELECT
stu.stuName,g.gradeName
FROM
student stu LEFT OUTER JOIN grade g
ON stu.gradeld = g.gradeld;
采用右外连接
SELECT
stu.stuName,g.gradeName
FROM
student stu RIGHT JOIN grade 9
ON stu.gradeld = g.grade;
自连接(内连接)
查询游戏名称和所属分类
SELECT
c1.categoryName,c2.categoryName
FROM
category c1,category c2
WHERE
c1.pid = c2.id