惊了!!! 小白零基础学java (月薪过万是你的梦想嘛) 手把手教学 就怕你不动手【二十七】第二章【使用DML查询数据】

– 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.查看学生表中的所有信息

不推荐写* 推荐写全字段名年列表

效率低

SELECT * FROM student;

2.查看学生表中的学生姓名和性别

SELECT stuName,gender FROM student;

– 1.2 别名(比较常用) 注意:此处使用中文只不过是方便你理解而已 后面不会采用写中文别名

AS关键字可以省略 ''也可以省略

SELECT stu.stuName AS ‘姓名’,stu.gradeId + 1 年级 FROM student stu;

如果SQL过长可以进行"美化"

目前个人推荐写法

SELECT
stuName AS ‘姓名’,
gradeId + 1 年级
FROM
student;

以前写法

SELECT
stuName AS ‘姓名’,gradeId + 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.4 where查询条件

在修改 和 删除时用过 目的是为了防止修改/删除全表。

用于检索数据表中符合条件的记录的

简单理解:上方的操作是用来筛选列的 where是用来筛选行的

在where条件语句中 可以由一个或者多个逻辑表达式组成 结果一般为真或假

<关系/比较运算符和逻辑运算符>

SELECT * FROM student;

查询年级是大于1的学生信息

SELECT * FROM student WHERE gradeId > 1;

复杂条件的处理:逻辑运算符 与and 或or 非not

查询姓名为张三 且 性别为女的学生信息

SELECT * FROM student WHERE stuName = ‘张三’ AND gender = ‘女’;

查询性别是女的 或者 年级为3的

SELECT * FROM student WHERE gender = ‘女’ OR gradeId = 3;

查询性别不是女的

SELECT * FROM student WHERE NOT gender = ‘女’;
SELECT * FROM student WHERE gender <> ‘女’;
SELECT * FROM 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 = 1 OR gradeId = 3;

更加简洁

SELECT * FROM student WHERE gradeId IN (1,3);
SELECT * FROM student WHERE gradeId NOT IN (1,3);

– 【2.掌握模糊查询】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,gradeId FROM 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.gradeId = g.gradeId;

查询所有的学生姓名、课程名称、考试成绩

SELECT
stu.stuName,sub.subjectName,r.result
FROM
student stu,subject sub,result r
WHERE
stu.stuId = r.stuId
AND
sub.subjectId = r.subjectId;

外连接:左外连接、右外连接

查询学生的姓名和所在年级

采用左外连接 以左表为主 LEFT JOIN前面的就是左表

SELECT
stu.stuName,g.gradeName
FROM
student stu LEFT OUTER JOIN grade g
ON stu.gradeId = g.gradeId;

采用右外连接

SELECT
stu.stuName,g.gradeName
FROM
student stu RIGHT JOIN grade g
ON stu.gradeId = g.gradeId;

– 自连接(内连接)

查询游戏名称和所属分类

SELECT
c1.categoryName,c2.categoryName
FROM
category c1,category c2
WHERE
c1.pid = c2.id

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值