DQL语言
DOL(Data Query Language 数据查询语言)
- 查询数据库数据,如SELECT语句
- 简单的单表查询或多表的复杂查询和嵌套查询
- 数据库语言中最核心,最重要的语句
- 使用频率最高的语句
SELECT语法
查询所有学生信息
SELECT * FROM student;//查询所有列,效率低,不推荐
查询指定列(学号 姓名)
SELECT studentno , studentname FROM student;
为列取别名(as,也可以省略)
SELECT studentno AS 学号,studentname AS 姓名 FROM student;
SELECT studentno 学号,studentname 姓名 FROM student;
为表取别名
SELECT studentno 学号,studentname 姓名 FROMR student AS s;
使用as,为查询结果去一个新名字
SELECT CONCAT('姓名:',studentname) AS 新姓名 FROM student;
去除重复项 (DISTINCT)
SELECT DISTINCT studentno FROM result;
select查询中可以使用表达式
SELECT @@auto_increment_increment
SELECT VERSION();
SELECT 100*3-1 AS 计算结果;
满足条件的查询(where)
SELECT studentno,studentresult
FROM result
WHERE studentresult>=95 AND student<=100;
#模糊查询
SELECT studentno,studentresult
FROM result
WHERE studentresult BETWEEN 95 AND 100;
#精确查询
SELECT studentno,studentresult
FROM result
WHERE studentno=1000;
模糊查询 between and\ like \ in \ null
like 结合使用的通配符 : %(0到任意字符) _(一个字符)
SELECT studentno,studentresult
FROM student
WHERE studentname LIKE '李%';
//李后面一个字
SELECT studentno,studentresult
FROM student
WHERE studentname LIKE '李_';
//李后面两个字
SELECT studentno,studentresult
FROM student
WHERE studentname LIKE '李__';
//姓名含有有"李"字的
SELECT studentno,studentresult
FROM student
WHERE studentname LIKE '%李%';
//姓名含有有"%"字的
SELECT studentno,studentresult
FROM student
WHERE studentname LIKE '%\%%';
//使用自己的转义符
SELECT studentno,studentresult
FROM student
WHERE studentname LIKE '%:%%' ESCAPE ':';
模糊查询: in null 这个里面只要包含就可以
select studentno,studentname
from student
where studentno in(1000,1001,1002,1003);
和null去比较必须写is null
区别空字符串和null
select studentname from student where address='' or address is null;//空字符串和null
连接查询(利用表和表之间的关系查询来自不同表的数据)
- 内连接 inner join :查询两个表中的结果集中的交集
- 外连接 outer join
-
- 左外链接: left join 以左表作为基准,右边表来一一匹配,匹配不上的,返回左表的记录,右表匹配不上的null来填充
- 右连接 right join 以又表作为基准,左边表来一一匹配,匹配不上的,返回又表的记录,左表匹配不上的null来填充
- 自连接
- 等值连接: 等同于内连
- 非等值连接 返回(左边行数)m*n(右边行数)
查询参加考试的同学信息(学号,学生姓名,科目编号,分数)
思路:分析需求,确定查询的列来源于哪两个表,连接查询
,再确定使用哪一种连接查询
select student.studentno,studentname,subjectno,studentresult
from student s
inner join result r
no r.StudentNo=s.StudentNo
自连接
#1.先创一个表
create table if not exists category(
categoryid int(10) unsigned not null auto_increment,
pid int(10) not null,
categoryName varvhar(50) not null,
primary key(categoryid)
);
#2.插入数据
insert into category
values(2,1,"美术设计"),
(3,1,"软件开发"),
(4,3,"数据库基础"),
(5,2,"ps基础"),
(6,2,"色彩搭配"),
(7,3,"PHP基础"),
(8,3,"java基础");
#编写sql语句,将栏目的父子关系呈现出来,(父栏目名称,子栏目名称)
#把category表看做两张一模一样的表,然后将这两张表连接查询(自连接)
select a.categoryNa '父栏目' ,b.categoryName '子栏目'
from category a, category b
where a.categoryId =b.pid
#排序
order by studentresult desc,studentno #默认为升序(asc)
#desc(降序)
# 可以按多个排序
分页显示(写在最后面)
limit 0,5; #从哪条记录开始(起始行,从0开始) 要显示几行
limit 5,5; #第二页
limit (pageno-1)*pagesize,pagesize # (当前页码-1)*页容量
group by #分组 写在where后面
having #过滤分组满足的次要条件