SQL简介
1,结构化查询语言,一门操作关系型数据库的编程语言
2,定义操作所有关系型数据库的统一标准
SQL通用语法
1,SQL语句可以多行或单行书写,以分号结尾
2,mysql 的sql语句不区分大小写,关键字建议大写
3,注释:
单行: -- 空格 注释 #注释
多行:/* 注释*/
SQL分类
DDL:操作数据库,表等
操作数据库
1,查询
show databases;
2,创建数据库
create database db1;
创建数据库,如果不存在则创建
create database if not exists db1;
3,删除数据库
dorp database db1;
删除数据库,如果存在则删除
dorp database if exists db1;
4,查看当前使用的数据库
select database();
使用数据库
use db1;
查询表&创建表
查询当前数据库下所有表名称;
show tables;
查询表结构
desc 表名称;
创建表
create table 表名(
字段名1 数据类型1,
字段名2 数据类型2,
字段名3 数据类型3,
字段名4 数据类型4,
字段名5 数据类型5
);
最后一行不你能加逗号、
删除表
drop table 表名;
判断
drop table if exists 表名;
修改表
1,修改表名
alter table 表名 rename to 新的表名;
2,添加一列
alter table 表名 add 列名 数据类型;
3,修改数据类型
alter table 表名 modify 列名 新数据类型;
4,修改列名和数据类型
alter table 表名 change
5,删除列
alter table 表名 drop 列名;
DML:对标中的数据进行增删改查
添加数据
1,给指定列添加数据
insert into 表名(列名1,列名2,...)values(值1,值2,...);
2,给全部列添加数据
insert into 表名 values(值1,值2,...);
3,批量添加数据
insert into 表名(列名1,列名2,..)values(值1,值2,...),(值1,值2,...),(值1,值2,...),...;
insert into 表名 values(值1,值2,...),(值1,值2,...),(值1,值2,...),...;
修改数据
1,修改表数据
update 表名 set 列名1=值1,列名2=值2,...[where条件];
注意:修改语句中如果不加条件,那么所有数据都将被修改
2,删除数据
delete from 表名[where 条件];
注意:修改语句中如果不加条件,那么所有数据都将被删除
DQL:对表中的数据进行查询
查询语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组后条件
order by
排序字段
limit
分页限定
基础查询
1,查询多个字段
select 字段列表 from 表名;
select* from 表名; --查询所有数据
2,去除重复记录
select disinct 字段列表from 表名;
3,起别名
AS: as也可以省略
示例:
CREATE TABLE stu (
id INT,
NAME VARCHAR ( 20 ),
age INT,
sex VARCHAR ( 5 ),
address VARCHAR ( 100 ),
math DOUBLE ( 5, 2 ),
hire_date DATE
);
INSERT INTO stu ( id, NAME, age, sex, address, math, english, hire_date )
VALUES
( 1, '马云', 55, '男', '杭州', 66,78, '1995-09-01' ),
( 2, '马化腾', 45, '女', '深圳', 76,78, '1998-09-01' ),
( 3, '马克思', 55, '男', '香港', 76,78, '1995-09-01' ),
( 4, '陆佰', 20, '女', '湖南', 99,78, '1995-09-01' ),
( 5, '刘庆', 20, '男', '湖南', 88,78, '1995-09-01' ),
( 6, '刘德华', 57, '男', '香港', 33,88, '1995-09-01' ),
( 7, '张学友 ', 22, '女', '香港', 56,33, '1995-09-01' ),
( 8, '德玛', 18, '男', '南京', 88,44, '1995-09-01' );
条件查询(where)
1,条件查询语法
select 字段列表 from 表名 where 条件列表;
示例:
查询年龄大于等于20岁的学员
select * from stu where age >=20;
查询年龄大于等于20岁的学员并且小于等于30
select * from stu where age >=20 && age<=30;
select * from stu where age >=20 and age<=30;#推荐
select * from stu where age between 20 and 30;
查询年龄等于18岁的信息
select * from stu where age =18;
查询年龄不等于18岁的信息
select * from stu where age != 18;
select * from stu where age <>18;
查询年龄等于20岁的学员或者等于30或者等于40
select * from stu where age =20 ||age =30 || age =40;
select * from stu where age =20 or age =30 or age =40;#推荐
查询英语成绩为null的学员信息
注意:null值的比较不能使用 = != 需要使用 is is not
select * from stu where english = null; --不行的
select * from stu where english is null;
select * from stu where english is not null;
模糊查询 like
通配符
1,_:代表一个任意字符
2,%:代表多个任意字符
查询姓马的学员
select * from stu where name like '马%';
查询第二个字是花的学员信息
select * from stu where name like '_花%';
查询包含德的学员信息
select * from stu where name like '%德%';
排序查询(order by)
1,排序查询语法
select 字段列表 from 表名 order by 排序字段名1[排序方式1],排序字段2[排序方式2]...;
排序方式:
ASC 升序排序(默认)
DESC 降序排序
注意:如果有多个排序条件,当前面的条件值一样时,才会根据第二条件进行排序
示例
按年龄升序排列
select * from stu order by age;
查询学员信息,按照数学降序排列
select * from stu order by math desc;
查询学员信息,按照数学降序排列,一样的话,按照英语升序排列
select * from stu order by math desc,english asc;
分组查询(group by)
聚合函数
1,概念:将一列数据作为一个整体,进行纵向计算
2,聚合函数分类:
AVG() 平均值
SUM()求和
MAX()最大值
MIN()最小值
COUNT()统计数量 一般不选用为null的列
3,聚合函数的语法
select 聚合函数名(列名) from 表;
注意:null值不参与聚合函数运算
分组查询
1,分组查询语法
select 字段列表 from 表名[where 分组前条件限定] group by 分组字段名 [having 分组后条件过滤];
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无意义
where和having 的区别
执行的时机不一样 where 是分组前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。
可判断的条件不一样,where不能对聚合函数进行判断,having可以
执行顺序:where>聚合函数>having
示例:
查询男同学,女同学各自的数学平均分
select sex,avg(math) from stu group by sex;
注意:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义
例如:
select sex,avg(math) from stu group by sex;
查询男同学,女同学各自的数学平均分,以及各自的人数
select sex,avg(math),count(*) from stu group by sex;
查询男同学,女同学各自的数学平均分,以及各自的人数 要求:分数低于70不参与分组
select sex,avg(math),count(*) from stu where math > 70 group by sex;
查询男同学,女同学各自的数学平均分,以及各自的人数 要求:分数低于70不参与分组,分组之后人数大于2
select sex,avg(math),count(*) from stu where math > 70 group by sex having count(*);
分页查询(limit)
1,分页查询语法
select 字段列表 from 表名 limit 起始索引,查询条目数;
起始索引:从0开始
计算公式:起始索引=(当前页码-1)*每页显示条数
tips:分页查询limit是MySQL数据库的方言
Oracle分页查询使用rownumber
SQL server分页查询使用top
示例:
从0开始查询,查询三条数据;
select * from stu limit 0,3;
每页显示3条数据,查询第1页数据
select * from stu limit 0,3;
每页显示3条数据,查询第2页数据
select * from stu limit 3,3;