目录
1.简单查询数据
# 查询表内所有数据
select * from 表名;
# 查询表内数据,以指定的列来显示结果
select [distinct] 字段名1,字段名2,... from 表名;
说明: 查询出数据内容,通常称为结果集。
2.比较查询
#对数据进行条件筛选
select [*|字段名1, 字段名2, ...] from 表名 where 条件;
说明:
1)当条件结果为True时,才能查询出数据结果。
2)在where 条件中,使用比较运算符来查询结果。
比较运算符有:
说明: 比较运算符的所有符号都是英文状态下的符号。
3.范围查询
范围查询是指在某个范围内进行查询,分别有in和between...and...。
(A)in是用于非连续值的范围查询,语法:
select * from 表名 where 字段名 in (范围值1,范围值2,...);
(B)between and 是用于值在连续范围的查询,语法:
select * from 表名 where 字段名 between 范围值1 and 范围值2
4.逻辑查询
#对数据进行条件筛选处理
select [*|字段名1, 字段名2, ...] from 表名 where 条件;
说明: 当条件结果为True时,才能查询出数据结果。
逻辑运算符有:
5.模糊查询
select * from 表名 where 字段名 like '%某个字%';
或
select * from 表名 where 字段名 like '某个字_';
说明: %表示任意多个任意字符,_表示一个任意字符。
6.非空查询
select * from 表名 where 字段名 [条件];
说明: [条件]部分就可以使用空或非空来表示。
非空运算符有:
说明: 此处的等于需要使用is来表示,可以简单的理解为是用于判断null对象。
7.排序查询
#SQL查询通用语法
select [*|字段名1,字段名2,...|函数(...)] from 表名 where 条件 另外的要求;
#排序查询:对某字段进行升序或降序的形式来查询结果
select * from 表名 where 条件 order by 字段名 [asc|desc];
说明:
1)asc从小到大排列,即升序;
2)desc从大到小排序,即降序;
3)默认按照列值从小到大进行排序(即asc升序)。
8.聚合查询
select 函数(...) from 表名 [where 条件];
说明: 函数(...)指的是聚合函数。
聚合函数有:
说明:
1)聚合函数是用于对一列数据进行统计,结果会返回一个单一的值;
2)注意:聚合函数会忽略空值进行统计处理。
动动手,练习一下吧~
例题:
先来创建一个数据库db_1,设定编码为utf8;
在库中创建一个worker表, 表中字段均为中文,比如 部门号 工资 职工号 参加工作 等
#创建数据库
create database db_2;
#使用数据库
use db_2;
#创建worker表
create table worker (
部门号 int(11) NOT NULL,
职工号 int(11) primary key,
工作时间 date NOT NULL,
工资 float(8,2) NOT NULL,
政治面貌 varchar(10) NOT NULL default '群众',
姓名 varchar(20) NOT NULL,
出生日期 date NOT NULL
) engine=InnoDB default charset=utf8 ;
#插入数据
INSERT INTO worker (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期) VALUES (101, 1001, '2015-5-4', 3500.00, '群众', '张三', '1990-7-1');
INSERT INTO worker (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期) VALUES (101, 1002, '2017-2-6', 3200.00, '团员', '李四', '1997-2-8');
INSERT INTO worker (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期) VALUES (102, 1003, '2011-1-4', 8500.00,'团员', '王亮', '1983-6-8');
INSERT INTO worker (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期) VALUES (102, 1004, '2016-10-10', 5500.00,'群众', '赵六', '1994-9-5');
INSERT INTO worker (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期) VALUES (102, 1005, '2014-4-1', 4800.00,'党员', '钱七', '1992-12-30');
INSERT INTO worker (部门号, 职工号, 工作时间, 工资, 政治面貌, 姓名, 出生日期) VALUES (102, 1006, '2017-5-5', 4500.00,'党员', '孙八', '1996-9-1');
1、显示所有职工的基本信息。
2、查询所有职工所属部门的部门号,不显示重复的部门号。
3、求出所有职工的人数。
4、列出最高工和最低工资。
5、列出职工的平均工资和总工资。
6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。
7、列出所有姓刘的职工的职工号、姓名和出生日期。
8、列出1960年以前出生的职工的姓名、参加工作日期。
9、列出工资在1000-2000之间的所有职工姓名。
10、列出所有陈姓和李姓的职工姓名。
11、列出所有部门号为2和3的职工号、姓名、党员否。
12、将职工表worker中的职工按出生的先后顺序排序。
13、显示工资最高的前3名职工的职工号和姓名。
14、求出各部门党员的人数。
15、统计各部门的工资和平均工资
16、列出总人数大于4的部门号和总人数。
# 1、显示所有职工的基本信息。
select * from worker;
# 2、查询所有职工所属部门的部门号,不显示重复的部门号。
select distinct 部门号 from worker;
# 3、求出所有职工的人数。
select count(职工号) from worker;
# 4、列出最高工和最低工资。
select max(工资),min(工资) from worker;
# 5、列出职工的平均工资和总工资。as 起别名
select avg(工资) as 平均工资,sum(工资) as 总工资 from worker;
# 6、创建一个只有职工号、姓名和参加工作的新表,名为工作日期表。
select 职工号,姓名,工作时间 from worker as worker_data;
# 7、列出所有姓张的职工的职工号、姓名和出生日期。
select 职工号,姓名,出生日期 from worker where 姓名 like '张%';
# 8、列出1990年以前出生的职工的姓名、参加工作日期。 year()只取日期中的年份
select 姓名,工作时间,出生日期 from worker where year(出生日期)<'1990';
# 9、列出工资在3000-4000之间的所有职工姓名。
select 姓名 from worker where 工资 between 3000 and 4000;
# 10、列出所有孙姓和李姓的职工姓名。
select 部门号,姓名 from worker where 姓名 like '孙%' or 姓名 like '李%';
# 11、列出所有部门号为102和103的职工号、姓名。
select 职工号,姓名 from worker where 部门号=102 or 部门号=103;
# 12、将职工表worker中的职工按出生的先后顺序排序。
select 姓名,出生日期 from worker order by 出生日期;
# 13、显示工资最高的前3名职工的职工号和姓名。 limit a:取前a行
select 职工号,姓名,工资 from worker order by 工资 desc limit 3;
# 14、求出各部门党员的人数。
select 部门号,count(姓名) from worker where 政治面貌 = '党员' group by 部门号;
# 15、统计各部门的平均工资
select 部门号,avg(工资) from worker group by 部门号 ;
# 16、列出总人数大于4的部门号和总人数。
select 部门号,count(职工号) as 总人数 from worker group by 部门号 having count(职工号)>=4;