数据库基本查询
1.语法
Select * | 列名1, 列名2...
From 表名1, 表名2...
Where 条件1 [and 条件2] [or 条件3]
Group by --分组查询
Having --分组比较
Order by --排序
2.全查询
– 查询全部老师的信息
–没有查询条件的时候
Select* from teacher
3.查询某几列
– 查询老师名字
Select teacher_name from teacher
4.条件查询
– 条件表达式:
– 第一种条件表达式: where 列名1 比较运算符 列名2
– 第二种条件表达式: where 列名1 比较运算符 数据
– 条件比较运算符
1)相等比较 =
2)大于; 小于比较
3)不相等比较 <>
4)多条件比较 and; or; not
– 案例:相等比较
SELECT * FROM student WHERE s_name = '路飞';
– 案例:大于,小于比较
SELECT * FROM student WHERE s_age > 17
SELECT * FROM student WHERE s_age >= 17
SELECT * FROM student WHERE s_age < 17
– 案例:不相等比较
SELECT * FROM student WHERE s_age <> 17
– 案例:多条件比较
SELECT * FROM student WHERE s_name = '路飞' AND s_age = 17;
SELECT * FROM student WHERE s_name = '路飞' OR s_age = 17;
– 案例:not关键字如何使用,针对数据为NULL,NULL是一个特殊数据
SELECT * FROM teacher WHERE teacher_name IS NOT NULL
5.模糊查询
1)通配符:_ 或 %
a. _:任意一个字符
b. %:任意0~n个字符
2)概念:可以查询相似的数据,关键字 like
– 语法:
Select * | 列名 from 表名 where 列名 like 通配符
– 案例:查询同学姓名是由两个字的组成
SELECT * FROM student WHERE s_name LIKE '__'--(LIKE后面是两个"_"以表示两个字长,如果三个则表示三个字长,以此类推)
– 案例:查询以‘路’开头的学生记录
SELECT * FROM student WHERE s_name LIKE '路%';
– 案例:查询名字第2个字符是“飞”的学生记录
SELECT * FROM student WHERE s_name LIKE '_飞%';
– 案例:查询姓名中包含“飞”的学生记录
SELECT * FROM student WHERE s_name LIKE '%飞%';
6)Between … And查询
– 可以去查询某一个范围内的数据
– 语法:
Select * | 列名... from 表名 where 列名 between 数据1 and 数据2
– 案例:
SELECT * FROM student WHERE s_age BETWEEN 16 AND 18;
– 扩展:根据记录总数来进行数据筛选
– 案例:查询第2条记录到第5条记录的数据
– limit 以后要用到数据库分页
– limit n,m
– n:从第几条记录开始,从0开始计算
– m:返回记录数(行数;总数)
我们的记录是从0开始的所以第2条记录到第5条数据实际上是1到4
SELECT * FROM student LIMIT 1,4
– 案例:查询满足16到18岁的同学中的第2条记录到第5条记录的数据
– 电商系统
– 搜索商品:手机 1000个手机记录
– 将商品数据进行分页
SELECT * FROM student WHERE s_age BETWEEN 16 AND 18 LIMIT 1,4
7)字段之间可以做运算
CREATE TABLE emp(
emp_no INT PRIMARY KEY AUTO_INCREMENT,
emp_name VARCHAR(50) NOT NULL,
emp_sal DECIMAL(7,2) NOT NULL,
emp_comm DECIMAL(7,2) NULL,
emp_job VARCHAR(20)
);
INSERT INTO emp (emp_name, emp_sal, emp_comm, emp_job) VALUES ('沫沫', 7000, 2000, '咨询顾问');
INSERT INTO emp (emp_name, emp_sal, emp_comm, emp_job) VALUES ('嘟嘟', 5000, 1500.50, '市场销售');
INSERT INTO emp (emp_name, emp_sal, emp_comm, emp_job) VALUES ('朵朵', 10000, NULL, '工程师');
INSERT INTO emp (emp_name, emp_sal, emp_comm, emp_job) VALUES ('丁玉姐', 8000, 1000, '销售顾问');
INSERT INTO emp (emp_name, emp_sal, emp_comm, emp_job) VALUES ('丁老头', 10000, 2000, '架构师');
INSERT INTO emp (emp_name, emp_sal, emp_comm, emp_job) VALUES ('丁帅哥', 5000, NULL, '安保大队');
INSERT INTO emp (emp_name, emp_sal, emp_comm, emp_job) VALUES ('马达加尔', 3000, 6000, '信息安全顾问');
INSERT INTO emp (emp_name, emp_sal, emp_comm, emp_job) VALUES ('CC', 4000, 2000.10, '咨询顾问');
INSERT INTO emp (emp_name, emp_sal, emp_comm, emp_job) VALUES ('兔兔', 8000, 5000.80, '咨询顾问');
SELECT emp_no, emp_name, emp_sal + emp_comm, emp_job FROM emp;
– 注意:任何数据与NULL完成算术运算,则结果是NULL
– 解决方法:使用mysql提供的去除NULL的函数
SELECT emp_no, emp_name, emp_sal + IFNULL(emp_comm,0), emp_job FROM emp;
8)别名
a)字段别名
b)表别名
– 语法
Select 列名1 别名, 列名2 别名 from 表名1 别名
– 好处:
1)区分如果两个以上表进行连接查询,列名同名现象。建议大家去使用别名区分。
2)字段之间做运算,则我们可以为做运算的结果添加别名。
3)字段通过函数进行运算,则我们也可以为 函数运算结果添加别名。
– 字段运算后产生的别名
SELECT emp_no, emp_name, emp_sal + IFNULL(emp_comm, 0) sal, emp_job FROM emp;
– 函数运算后产生的别名
SELECT emp_comm, IFNULL(emp_comm, 0) comm,emp_sal FROM emp
– 表的别名
SELECT emp_name, emp_sal + IFNULL(emp_comm, 0) sal, emp_job FROM emp a WHERE a.emp_name = '沫沫'
– 表的别名, 两表中出现了相同的列名
SELECT s_name, sc_score FROM student a, student_course b
WHERE a.s_no = b.s_no AND a.s_name = '路飞';
9)排序
a)将数据查询结果进行排序
b)排序规则:ASC升序;DESC降序
c)对单个列进行排序,多个列进行排序
– 语法
Select * | 列名.. from 表名
where 条件
group by 分组
having 分组比较
order by 排序
limit n,m
– 查询顺序:数据检索顺序
Where > group by > having > order by > limit
– 案例:查询数学分数由高到低学生信息
– 如果连接查询有 n 张表,则条件(主外键关系)必须满足 n - 1
SELECT s_name,c_name,sc_score FROM student a, student_course b, course c
WHERE a.s_no = b.s_no AND c.c_no = b.c_no AND c.c_name = '霸气' ORDER BY sc_score DESC;
SELECT s_name,c_name,sc_score FROM student a, student_course b, course c
WHERE a.s_no = b.s_no AND c.c_no = b.c_no AND c.c_name = '霸气' ORDER BY sc_score DESC, s_name ASC;