一、SQL的概念
1.什么是SQL
结构化查询语言(structured query language)简称SQL,SQL语句就是对数据库进行操作的一种语言。
2.SQL的作用
通过SQL语句我们可以方便的操作数据库中的数据、表、数据库。SQL是数据库管理系统都需要遵循的规范。不同的数据库生产厂商都支持SQL语句,但都有特有内容。
3.SQL语句的分类
(1)DDL(Data Definition Language)数据定义语言
用于定义数据库对象:数据库、表、列等。关键字:create、drop、alter等。
(2)DML(Data Manipulation Language)数据操作语言
用来对数据库中表的数据进行增删改。关键字:insert、delete、update等。
(3)DQL(Data Query Language)数据查询语言
用于查询数据库中表的记录(数据)。关键字:select、where等。
(4)DCL(Data Control Language)数据控制语言
用于定义数据库的访问权限和安全级别,及创建用户 。关键字:GRANT、REVOKE等。
4.SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- 可使用空格和缩进来增强语句的可读性。
- MySQL数据库的SQL语句不区分大小写,关键字建议使用大写。例如:SELECT * FROM student;
- 三种注释:单行注释:-- 注释内容(双横杠后必须有空格) 或 # 注释内容(MySQL特有)多行注释:/* 注释内容 */
二、DDL操作数据库(CRUD--create、retrieve、update、delete)
1.创建数据库
1.1 创建数据库的几种方式
- 创建数据库:CREATE DATABASE 数据库名;
- 判断是否存在并创建数据库:CREATE DATABASE IF NOT EXISTS 数据库名;
- 创建数据库并指定字符集(编码表):CREATE DATABASE 数据库名 CHARACTER SET 字符集;
1.2 具体操作
练习,创建数据库db4,判断是否存在,设置字符集gbk:create database if not exists db4 character set gbk;
2.查询数据库:
- 查询所有数据库的名称:show databases;
- 查询某个数据库的字符集(查询某个数据库的创建语句):show create database 数据库名称;
3.修改数据库
- 修改数据库的字符集:alter database 数据库名 character set 字符集名称;
4.删除数据库
- 删除数据库:drop database 数据库名称;
- 判断是否存在并删除数据库:drop databse if exists 数据库名;
5.使用数据库
- 查询正在使用的数据库名称:select database()
- 使用数据库:use 数据库名;
三、DDL操作表
1.C(create)- 创建表
语法:
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
……
列名n 数据类型n
);
注意:
最后一列,不需要加逗号(,)
数据类型:
datetime和timestamp类型格式一样,区别为:timestamp类型如果不给这个字段赋值或者赋值为null,则默认使用当前的系统时间来自动赋值。
varchar(20):最大20个字符。zhangsan - 8个字符 张三 - 2个字符。
复制表语法:创建表2,表2和表1表结构一样,语法:
create table 表名2 like 表名1;
2.R(Retrieve)- 查询表
- 查询数据库中所有表的名称:show tables;
- 查询表结构:desc 表名称
3.U(update)- 修改表
- 修改表名
- alter table 表名 rename to 新的表名;
- 修改表的字符集
- 查看表的字符集:show create table 表名;
- 修改表的字符集:alter table 表名 character set 字符集名称;
- 添加列
- alter table 表名 add 列名 数据类型;
- 修改列名、类型
- 修改列名和类型:alter table 表名 change 列名 新的列名 新的数据类型;
- 修改类型:alter table 表名 modify 列名 新的数据类型;
- 删除列
- alter table 表名 drop 列名;
4.D(delete)- 删除表
- 删除表:drop table 表名;
- 判断是否存在并删除表:drop table if exists 表名;
四、DML操作数据库中表的记录
1. 添加数据
语法:
insert into 表名(列名1,列名2,……,列名n) values(值1, 值2, ……, 值n);
注意:
- 列名和值要一一对应。
- 如果表名后,不定义列名,则默认给所有数据添加值。insert into 表名 values(值1, 值2, ……, 值n);
- 除了数字类型,其它类型需要使用引号(单引号、双引号都可以)。
2.修改数据
语法:
update 表名 set 列名1 = 值1 , 列名2=值2 , …… , 列名n=值n [where 条件];
注意:
如果不加任何条件,则会将表中所有记录全部修改。
3.删除数据
语法:
delete from 表名 [where 条件]
truncate table 表名; -- 删除表,并创建一个一模一样的空表。
注意:
- 如果不加条件,则删除表中所有记录。
- 如果要删除表中所有记录,有两种方式:
- delete from 表名; -- 不推荐使用。有多少条记录就会执行多少次删除操作。
- truncate table 表名; -- 推荐使用。效率更高。先删除表,再创建一张一模一样的空表。
五、DQL查询语句的使用
语法:
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件限定
order by
排序
limit
分页限定
1.排序查询
语法:order by 子句
order by 排序字段1 排序方式1, 排序字段2 排序方式2……
排序方式:
ASC:升序,是默认的。
DESC:降序。
如果有多个排序条件,则当前面的条件值一样时,才会去判断第二条件。
2.聚合函数
定义:将一列数据作为一个整体,进行纵向的计算。
cout:计算个数
max:计算最大值
min:计算最小值
sum:计算和
avg:计算平均值
注意:聚合函数的计算会排除null值。
select count(列名) from 表名;
解决方案有两种:
第一种选择不包含空列进行计算。主键;count(*)
第二种ifnull函数. select count(ifnull(english,0)) from student;
3.分组查询
语法:group by 分组字段
注意:
(1).查询后的字段只能是分组字段或聚合函数。select sex, avg(math), count(id) from student group by sex;
(2).where 在分组之前进行限定,如果不满足条件,则不参与分组。where后不可以跟聚合函数进行判定。
分组前对条件进行限定的操作:select sex, avg(math), count(id) from student where math > 70 group by sex;
(3).having 在分组之后进行限定,如果不满足条件,则不会被查询出来。having后可以跟聚合函数进行判定。
分组之后对条件进行限定的操作:select sex, avg(math), count(id) from student where math > 70 group by sex having count(id) > 2;
起别名更方便:select sex, avg(math), count(id) as persons from student where math > 70 group by sex having persons> 2;
4.分页查询
语法:limit 开始的索引, 每页查询的条数;
公式:开始的索引 = (当前的页码 - 1)* 每页显示的条数
分页操作是一个“方言”
5.基础查询
(1)查询多个字段
select 字段1,字段2…… from 表名;
如果查询所有字段,可以用 select * from student;
(2)去除重复
select distinct 列名列表 from 表名
只有两个结果集的字段完全一致,才可以去除重复。
(3)计算列
一般可以用四则运算计算一些列的值。
select name, math, english, math + enlish from student;
如果有null参与的运算,计算结果都为null。
select name, math, english, math + ifnull(english,0) from student;
ifnull(表达式1, 表达式2):表达式1 - 需要判断哪个字段是否为null,表达式2 - 如果该字段为null的替换值。
(4)起别名
select name, math, english, math + ifnull(english, 0) as sumScore from student;
as可以省略,用空格代替。
6.条件查询
(1)where后跟条件子句
(2)运算符
比较运算符:
逻辑运算符:
7.条件查询_模糊查询
_:单个任意字符
%:多个任意字符