基本查询

查询学生表中的所有数据

SELECT * FROM student;

从学生表中查询指定的字段

SELECT id,NAME,chinese FROM student;

给字段取别名

SELECT id AS ‘序号’,NAME AS ‘名字’,chinese AS ‘语文成绩’ FROM student AS m;

查询合并列(只要数值类型的字段可以合并)

SELECT id AS ‘序号’,NAME AS ‘名字’,(chinese+english+math) AS ‘总成绩’ FROM student AS m;

去重查询

SELECT DISTINCT(NAME) FROM student;

条件查询

需求: 查询id为2,且姓名为李四的学生

SELECT * FROM student WHERE id = 2 AND NAME = ‘李四’;

需求: 查询id为2,或姓名为张三的学生

SELECT * FROM student WHERE id = 2 OR NAME = ‘张三’;

*比较条件 > < >= <= = <>(不等于) between and (等价于>= 且 <=)

需求: 查询语文成绩大于70分的学生

SELECT * FROM student WHERE chinese >= 70;

需求: 查询英语成绩大于等于75,且小于等于90分的学生

SELECT FROM student WHERE english>=75 AND english<=90;
SELECT
FROM student WHERE english BETWEEN 75 AND 90; — 包前包后

查询性别不等于男的

SELECT * FROM student WHERE gender <> ‘男’;

关于null null用于不等于null null和空字符串是两个东西,空字符串是有值的,null是无值的

查询id为null的学生

SELECT * FROM student WHERE id IS NULL;

查询姓名为空字符串的

SELECT * FROM student WHERE NAME = ‘’;

需求: 查询id不为null或者name有值的学生

SELECT * FROM student WHERE id IS NOT NULL OR NAME <> ‘’;

模糊查询

查询姓名以 李 开头的学生

%可以匹配一个或多个字符 _可以匹配一个字符
SELECT * FROM student WHERE NAME LIKE ‘李%’;

查询姓名以 李 开头的,并且姓名是两个字的

SELECT * FROM student WHERE NAME LIKE ‘李_‘;

查询名字包含小的学生

SELECT * FROM student WHERE NAME LIKE ‘%小%’;

聚合查询 对表的多行数据进行操作得到一个结果

sum() avg() max() min() count()

SELECT SUM(chinese) FROM student;
SELECT AVG(chinese) FROM student;
SELECT COUNT(chinese) FROM student;

分页查询 limit x,y 表示跳过前面x条数据,查询y条数据

SELECT FROM student;
SELECT
FROM student LIMIT 0,2;
SELECT FROM student LIMIT 2,2;
SELECT
FROM student LIMIT 4,2;

排序 asc(升序,默认) desc(降序)

SELECT * FROM student ORDER BY chinese DESC;

查询所有的学生,首先按照语文成绩升序排列,当学生的语文成绩一样的时候再按照英语成绩降序排序

SELECT * FROM student ORDER BY chinese ASC,english DESC;

解决null在前面和后面的问题 在需要排序的列前面添加-号

SELECT * FROM student ORDER BY -chinese DESC;

分组查询 group by

SELECT gender,COUNT(*) FROM student GROUP BY gender;

关联查询

1.创建一个部门表

  1. CREATE TABLE dept(
  2. id INT PRIMARY KEY AUTO_INCREMENT,
  3. deptName VARCHAR(20)
  4. ) ENGINE=INNODB DEFAULT CHARSET=utf8;
  5. INSERT INTO dept(deptName) VALUES('技术部');
  6. INSERT INTO dept(deptName) VALUES('人力资源部');
  7. INSERT INTO dept(deptName) VALUES('市场部');
  8. INSERT INTO dept(deptName) VALUES('总经办');
  9. SELECT * FROM dept;

2.创建一个员工表

  1. CREATE TABLE employee(
  2. id INT PRIMARY KEY AUTO_INCREMENT,
  3. empName VARCHAR(20),
  4. deptId INT,
  5. -- CONSTRAINT 表示约束
  6. -- fk_emlyee_dept 表示约束的名字
  7. -- FOREIGN KEY(deptId) 表示给当前表的deptId字段添加约束
  8. -- REFERENCES dept(id) 当前表的deptId字段去引用dept表的id字段
  9. -- ON UPDATE CASCADE 级联更新
  10. -- ON DELETE CASCADE 级联删除
  11. CONSTRAINT fk_emlyee_dept FOREIGN KEY(deptId) REFERENCES dept(id)
  12. ON UPDATE CASCADE ON DELETE CASCADE
  13. ) ENGINE=INNODB DEFAULT CHARSET=utf8;
  14. INSERT INTO employee (empName,deptId) VALUES('小明',1);
  15. INSERT INTO employee (empName,deptId) VALUES('小虎',2);
  16. INSERT INTO employee (empName,deptId) VALUES('小强',4);
  17. INSERT INTO employee (empName,deptId) VALUES('小白',1);
  18. SELECT * FROM employee;

3.关联查询 关联多个表进行查询

需求:查询员工及其所在部门(显示员工姓名,部门名称)

内连接 写法1

SELECT empName,deptName FROM employee,dept WHERE employee.deptId = dept.id;

内连接 写法2

SELECT deptName,empName FROM employee INNER JOIN dept ON employee.deptId = dept.id;

左外连接 LEFT OUTER JOIN 左边的叫左表

SELECT empName,deptName FROM employee LEFT OUTER JOIN dept ON employee.deptId = dept.id;

左外连接相当于内连接的好处是 能够保证左表的数据完全显示

SELECT deptName,empName FROM dept LEFT OUTER JOIN employee ON dept.id = employee.deptId;