SQL语法详解 1
1.DDL操作数据库(CRUD)
(create)创建数据库:
create database 数据库名称 ;
-- 创建数据库判断是否存在
create database if not exists 数据库名称 ;
-- 创建数据库并指定字符集
create database 数据库名称 character set gbk;
(retrieve)查询:
-- 查询所有数据库名称
show databases;
-- 查询数据库创建语句
show create database 数据库名称 ;
(update)修改:
-- 修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
(delete)删除:
-- 删除数据库
drop database 数据库名称 ;
-- 判断数据库是否存在,再删除
drop database if exists 数据库名称;
使用数据库:
-- 查询当前正在使用的数据库
select database() ;
-- 使用数据库
use 数据库名称;
2.语法详解----DDL操作表(CRUD)
(create)创建表:
create table student(
id int,
name varchar(32),
age int,
score double(4,1),
birthday date,
insert_time timestamp not null
);
数据类型:
double:小数类型 score double(4,1)指定小数的位数
varchar:字符串类型 name varchar(20) 最长20个字符
date:日期 年月日
datetime:年月日时分秒
timestamp:时间戳 如果该字段没有赋值或者为null,则使用系统时间自动赋值
复制表:
create table 新表 like 原表;
(retrieve)查询表:
-- 查询所有数据库中表名称
show tables;
-- 查询表结构
desc表名称 ;
(update)修改:
-- 修改表的字符集
alter table 表名称 character set 字符集名称;
-- 修改表的名称 类型
alter table 表名称 rename 新表名称;
-- 添加列
alter table 表名称 add 列名称 数据类型;
-- 修改列名称 数据类型
alter table 表名称 change 列名 新列名 数据类型;
-- 修改列的类型
alter table 表名称 modify 列名 数据类型;
-- 删除列)
alter table 表名称 drop 列名;
(delete)删除:
- 删除表
drop table 表名称 ;
--判断表是否存在,再删除
drop table if exists 表名称;
3.语法详解----DML 操作(增删改)数据
添加数据:
insert into 表名(列1,列2,...列n) values(值1,值2, ... 值n);
删除数据:
delete from 表名称 [where 条件];
注意:truncate table 表名;先删除表,再创建一张一样的空表;(效率较高,推荐使用)
修改数据:
update 表名 set 列名1=值1,列名2=值2 . . .列名n=值n [where 条件 ];
如果不加条件则更改所有的记录。
4.语法详解----DQL 操作 查询数据
(1)基础语法:
select 字段列表 from 表名列表 where 条件列表 group by 分组字段 having 分组后条件 order by 排序 limit 分组限定;
(2)基础查询
-- 多个字段查询:
select 字段名1,字段名2 from 表名;
-- 去除重复(distinct)
select distinct 字段名1,字段名2 from 表名;
-- 计算列的值(一般只进行数值计算)
SELECT NAME,math,english,math+english AS 总分 FROM student;
如果有null参与运算,计算结果为null (English值为null)
ifnull(表达式1,表达式2)
表达式1:那个字段需要判断是否为null
表达式2:null的替换值
SELECT NAME,math,english,math+IFNULL(english,0) AS 总分 FROM student;
起别名:AS 也可以省略;
(3)条件查询
where子句后跟条件
运算符 >、<、<= 、>= 、= 、<>(不等于 !=) 、between . . . and 、
in(集合) 、and && 、or |、not ! 、is null
SQL语句:
-- eg:年龄大于20
SELECT * FROM student WHERE age>25;
SELECT * FROM student WHERE age<>25;
SELECT * FROM student WHERE age!=25;
-- eg:年龄在25 到30之间
SELECT * FROM student WHERE age>=25 AND age<=30;
SELECT * FROM student WHERE age>=25 && age<=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;
SELECT * FROM student WHERE age=25 OR age=27;
SELECT * FROM student WHERE age IN(22,25,32);
-- eg:查询英语成绩为null
SELECT * FROM student WHERE english=NULL; -- 错误null不能使用 = !=
SELECT * FROM student WHERE english IS NULL;
-- eg: 查询英语成绩不为null
SELECT * FROM student WHERE english IS NOT NULL;
模糊查询:
like 占位符_:单个任意字符 占位符%:任意字符
SQL语句:
SELECT * FROM student WHERE NAME LIKE '刘%';
SELECT * FROM student WHERE NAME LIKE '_云%';
SELECT * FROM student WHERE NAME LIKE '___';