SQL结构化查询语句
SQL定义了查询所有关系型数据库的规则。
1、通用语法
- SQL语句可以单行或者多行书写,以分号结尾
- 可以使用空格和缩进增强可读性
- 不区分大小写,但是关键字建议大写
- 3种注释
-
注释内容;多行注释/*;-- 注释内容
-
2、SQL分类
- DDL(Date Definition Language)数据定义语言
- 用来定义数据库对象:数据库、表、列等,包括关键字:create,drop、alte
- DML(Data Manipulation Language)数据操作语言,增删改
- 用来对数据库的表中的数据进行增删查改。关键字:insert、delete、update
- DQL(Date Query Language)数据查询语言,查
- 用来查询数据库表中的记录。关键字:select、where
- DCL(Data Control Language)数据控制语言
- 用来定义数据库的访问权限,安全级别,以及创建用户,关键字:GRANT、REVOKE
3、DDL操作数据库、表
-
操作数据库:CRUD
- C(create)创建
SQL语句 描述 CREATE database (if not exists) 数据库名 (character set 字符集名称); 创建一个新的数据库,括号是一个判断是否存在、设定该数据库的字符集 - R(Retrieve)查询:
SQL语句 描述 show databases; 查看所有的数据库名称 show create database 数据库名; 查看某个数据库的创建语句 - U(Update)修改
SQL语句 描述 alter database 数据库名 character set 字符集名称; 修改数据库使用的字符集 - D(Delete)删除,使用前三思
SQL语句 描述 drop database (if exits )数据库名; 判断存在就删除数据库 - 查询当前在使用的数据库
SQL语句 描述 select database(); 查询当前在使用的数据库 - 使用数据库
SQL语句 描述 use 数据库名称 使用某个数据库 2、操作数据库表
- C(create)创建
语法:
create table 表名称( 列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3, ... 列名n 数据类型n ); # 最后一列不要加逗号,分号等,分号是结束标志
其他创建表语句:
create table table1_copied like table1
,创建一个表,复制table1数据类型:
数据类型 描述 int 整数 double(n, m) 浮点数类型,指定一共有n位,小数点后保留m位 date 日期类型,只包含年月日,yyyy-MM-dd datetime 日期时间类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss timestamp 时间戳类型,包含年月日时分秒,yyyy-MM-dd HH:mm:ss,如果将来不给这个字段赋值为null,就自动使用系统时间 varchar(n) 字符串类型,要指定最大为n个字符 - R(Retrieve)查询,进到某个数据库后
SQL语句 描述 show tables; 查看该数据库所有的表 desc 表名称; 查询一个表的表结构,有什么字段,字段类型,是否主键等信息 - U(Update)修改
- 修改表名:
alter table 表名称 rename to 新表名称;
- 修改表的字符集:
alter table 表名称 character set 字符集名称;
- 修改列名,数据类型:
alter table 表名称 change 列名称 新列名称 新数据类型;
alter table 表名称 modify 列名称 新数据类型;
- 删除列:
alter table 表名称 drop 列名称;
- 添加列:
alter table 表名称 add 列名称 数据类型;
- 修改表名:
- D(Delete)删除表
SQL语句 描述 drop table (if exists) 表名称 删除表,如果表存在
4、DML:操作表中的数据
- 添加数据
- 语法:insert into 表名称(列名1, 列名2.....列名n) values(值1, 值2......值n)
注意:
- 列名和值要一一对应
- 如果不写列名,就默认要给所有列添加数据
- 除了数字类型,其他类型都要用引号引起来
- 语法:insert into 表名称(列名1, 列名2.....列名n) values(值1, 值2......值n)
- 删除数据
- 语法:delete from 表名 [where 条件]
注意:
- delete from 表名:不写条件,就删除表中所有的数据
- TRUNCATE TABLE 表名:先删除表,再创建一张一样的空表,推荐使用这个语句删除所有记录
- 语法:delete from 表名 [where 条件]
- 修改数据
- 语法:update 表名 set 列名1 = 值1,列名2 = 值2,...[where 条件]
5、DQL:查询表中的数据
-
DQL查询语句
- select * from 表名称:查询一个表的全部数据
- 排序查询,语法:order by 句子
- order by 排序字段1 排序方式1, 排序字段2 排序方式2,......;这里的意思是,首先按照排序方式一,如果方式一一样,那么使用方式二排序;(也就是只有第一种方式一样时,才会判断第二种方式)
注意:排序方式:
升序:ASC;降序:DESC
select * from student order by age DESC;(按照年龄降序排序)
- order by 排序字段1 排序方式1, 排序字段2 排序方式2,......;这里的意思是,首先按照排序方式一,如果方式一一样,那么使用方式二排序;(也就是只有第一种方式一样时,才会判断第二种方式)
- 聚合函数,将一列数据作为一个整体,进行纵向的计算。
- count:计算个数
select count(列名称) from 表名称
- 注意:聚合函数排除了空的(NULL)的行,解决方法
- 替换NULL值的方法:
select count(ifNULL(name, " ")) from student;
- 尽量使用统计的列不要有空值的类,一般是主键
- 使用count(*)
- 替换NULL值的方法:
- max:计算最大值
select max(列名) from 表名
- min:计算最小值
select min(列名) from 表名
- sum:求和
select sum(列名) from 表名
- avg:计算平均值
select avg(列名) from 表名
- count:计算个数
- 分组查询:统计具有相同特征的
语法:group by 字段 select sex, avg(age), count(id), min(age) from student group by sex;
? 注意:
- 分组之后只能查询的字段,只有分组字段和聚合函数
where
在分组之前限定,如果不满足条件,就不参与分组;having是在分组之后进行限定,如果不满足条件就不会被查询出来- where后不可以跟聚合函数,having后可以进行聚合函数的判断
select sex, avg(age), count(id), min(age) from student where age > 20 group by sex having count(id) <= 2;
- 一般可以在聚合函数后写一个别名,这样就可以在判断的时候使用别名
select sex, avg(age), count(id) peopleCount, min(age) from student where age > 20 group by sex having peopleCount <= 2;
?
原文地址:https://www.cnblogs.com/zhuobo/p/10686791.html
时间: 2024-12-21 10:16:55