1.最基本通用的查询全表的数据
SELECT * FROM employee ;
-- 实际开发中,写sql的时候,不能书写*
2.在dos窗口输入一个指令,模糊查询当前mysql数据库中所有带有"character"字符集的变量全部出来
SHOW VARIABLES LIKE '%character%' ;
-- 在dos窗口中需要修改 set character_set_client = gbk ;
-- 还需要给结果集的字符集 set character_set_results = gbk ;
-- 改动完成,才能在dos窗口中临时插入数据可以支持中文的;
3.需要查询全表,需要写全部的字段名称
写法一:没有表的别名
SELECT
id,
NAME,
age,
sex,
address,
math,
english
FROM
student3 ;--表名
写法二:需要查询全表,需要写全部的字段名称,给表起别名(表的名称比较长)
-- 同时给字段起别名
SELECT
s.id AS '编号',
-- 编号
s.`name` AS '姓名',
-- 姓名
s.`age` AS '年龄',
-- 年龄
s.sex AS '性别',
-- 性别
s.`address` AS '地址',
-- 地址
s.`math` AS '数学成绩',
-- 数学
s.`english` AS '英语成绩' -- 英语
FROM
student3 AS s ;
-- as是可以省略的
4.查询表
①查询指定的字段
需求:查询出员工编号以及员工姓名,员工年龄,性别
SELECT
s.`id` '员工ID',-- 编号
s.`name` '员工姓名',
s.age '员工年龄',
s.`sex` '性别'
FROM
student3 s ;
②查询整数类型的求和
需求:查询员工的id,name,age,sex,以及数学和英语的总分
SELECT
id '员工编号' ,
NAME '员工姓名',
age '员工年龄',
sex '员工性别',
(math+IFNULL(english,0)) '总分' -- 当英语成绩是null空值,给一个0
FROM
student3 ;
-- 注意事项:两个整数类型求和,如何一个字段是null值,结果null(没意义,空值)
-- 在mysql里面有函数 ifnull(字段名称,给期望值) ; 如果当前字段名称为null值,给他一个期望值
③带条件查询
select 指定的字段名称 from 表名 where 条件 ;
需求:查询年龄是20岁的学生的所有信息
SELECT
*
FROM
student3
WHERE
age = 20 ;
需求:查询出年龄小于等于20岁的员工的姓名,年龄,性别以及总分成绩
SELECT
NAME '员工姓名',
age '年龄',
sex '性别',
(math+IFNULL(english,0)) '总分'
FROM
student3
WHERE
age <= 20 ;
需求:查询学生年龄不为20岁的学生的所有信息
SELECT
*
FROM
student3
WHERE
age != 20 ;
-- mysql里面判断某个条件不等于,<>(不等于)
SELECT
*
FROM
student3
WHERE
age <> 20 ;
需求:查询学生的年龄在20岁到30岁的学生所有信息
SELECT
*
FROM
student3
WHERE
age >= 20 AND age <= 30 ;
-- 简写
SELECT
*
FROM
student3
WHERE
age
BETWEEN 20 AND 30 ;
需求:查询出来学生的年龄是18岁,或者是20岁或者45岁的学生的所有信息
SELECT
*
FROM
student3
WHERE
age = 18
OR
age = 20
OR
age = 45 ;
-- 简写
SELECT
*
FROM
student3
WHERE
age
IN(18,20,45) ;
需求:查询出英语成绩为null的学生id,name,age,address以及英语成绩信息
SELECT
id '编号',
NAME '姓名',
age '年龄',
address '地址',
english '英语成绩'
FROM
student3
WHERE
english IS NULL ;
④模糊查询
关键字 like
select 指定字段列表 from 表名 where 字段名称 like '%字符%'
%:就是匹配任意字符(代表多个字符),(使用最多)
_:一个下划线代表一个任意字符值 (包含关系) (使用不多)
需求:模糊查询所有姓为马的学生所有信息
SELECT
*
FROM
student3
WHERE
NAME
LIKE '%马%' ;
需求:查询出姓名是两个字符的学生的所有信息
SELECT
*
FROM
student3
WHERE
NAME LIKE '__' ;
需求:模糊查询 学生姓名中第二个字是化的学生所有信息
SELECT
*
FROM
student3
WHERE
NAME LIKE '%_化%';
需求:查询学生姓名是否三个字符的人
SELECT
*
FROM
student3
WHERE
NAME LIKE '___' ;
⑤聚合函数查询
语法 select 聚合函数(字段名称) from 表名 ;
count(字段名称):查询当前表的记录数字段名称:一般非业务字段 id,如果业务字段的有些值null,数据存在漏洞的!
sum(字段名称):求和,针对某列字段值进行求和(整数)
avg(字段名称):平均分函数
max(字段名称) :最大值函数
min(字段名称) :最小值函数
需求:查询当前学生表中的总记录数
SELECT COUNT(id) '总记录数' FROM student3 ;
需求:对数学成绩和英语成绩进行求和
SELECT
SUM(IFNULL(english,0)) AS '英语成绩总和' -- 英语成绩里面有null
FROM student3 ;
SELECT
SUM(math) '数学成绩总和'
FROM student3 ;
需求:数学成绩的平均分
SELECT
AVG(math) '数学平均分'
FROM
student3;
需求:获取出数学成绩最高分,和最低分
SELECT
MAX(math) '最高分',
MIN(math) '最低分'
FROM student3 ;
⑥:复杂查询和聚合函数一块使用
最常见:where 字段名称 比较运算符 (select 聚合函数查询)
需求:查询出来学生数学成绩最高分的学生信息
-- 分两步
-- 1)先查询出最高分的数学成绩
SELECT MAX(math) FROM student3 ;
-- 2)查询出等于99的学生信息
SELECT
*
FROM
student3
WHERE
math = 99 ;
-- 一步走
SELECT
*
FROM
student3
WHERE
math = (SELECT MAX(math) FROM student3) ;
需求:查询出数学成绩大于数学平均分的学生信息;
-- 分两步走
-- 1)查询出来数学平均分是多少
SELECT AVG(math) FROM student3 ;
-- 2)查出数学成绩大于79.5000 这个的学生信息
SELECT
*
FROM
student3
WHERE
math > 79.5000
-- 一步走
SELECT
*
FROM
student3
WHERE
math > (SELECT AVG(math) FROM student3) ;
⑦排序查询
关键字order by
语法:select 字段列表 from 表名 order by 字段名称 排序规则
排序规则: asc :升序(默认值) desc :降序
需求:数学成绩升序排序,查询所有信息
SELECT
*
FROM
student3
ORDER BY
math ASC; -- math后面如果没有带排序条件,默认就是升序
需求:英语成绩降序排序
SELECT
*
FROM
student3
ORDER BY
english DESC;
⑨多个字段排序
语法:select 字段列表 from 表名 order by 字段名称1 排序规则1 ,字段名称2 排序规则2 ;
需求:查询数学成绩降序,英语成绩是升序的所有学生信息(如果数学成绩相同,按照英语成绩排序规则进行操作)
SELECT
*
FROM
student3
ORDER BY math DESC ,english ASC ;