SQL语法
(1) 什么是SQL?
Structured Query Language:结构化查询语言
定义了操作所有关系型数据的规则。每种数据库操作的方式存在差异
(2) SQL语法
2.1 SQL语句可以单行或多行书写,以分号结尾
2.2 MySQL数据库的SQL语句不区分大小写,关键字建议大写
2.3 可以使用空格和缩进来增强语句的可读性
2.4 注释
*)单行注释:-- 注释内容 或者 # 注释内容(mysql 特有的)
*)多行注释: /* 注释 */
(3) SQL分类
(3.1) DDL(Date definition Language)
数据定义语言
用来定义数据库对象:数据库、表、列等。关键字:create、drop、alter等
(3.2) DML(Date Manipulation Language)
数据操作语言
用来对数据库中的表的数据进行增删改。关键字:insert、delete、update等
(3.3) DQL(Date Query Language)
数据查询语言
用来查询数据库中的表的记录(数据)。关键字:select、where等
(3.4) DCL(Date Control Language)
数据控制语言(了解)
用来对定义数据库的访问权限和安全级别以及创建用户。关键字:grant、revoke等
(4) DDL操作数据库、表
(4.1) 操作数据库:CRUD
-
(4.1.1)C(Create):创建数据库
∮创建数据库:create database 数据库名称; 创建一个dbTest数据库(create database dbTest;)
∮判断某个数据库不存在再去创建: create database if not exists dbTest;
∮指定字符集创建:create database dbTest character set gbk; 指定默认字符集为GBK创建数据库
-
(4.1.2)R(Retrieve):查询数据库
∮查询所有数据库的名称: show databases;
∮查询某个数据库的字符集:show create database 数据库名称;
-
(4.1.3)U(Update):修改数据库
∮修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
-
(4.1.4)D(Delete):删除数据库
∮删除数据库
drop database 数据库名称;
∮数据库如果存在再删除
drop database if exists 数据库名称;
-
(4.1.5)使用数据库
∮使用当前正在使用的数据库名称
select database();
∮使用更换数据库
use 数据库名称;
(4.2) 操作表[重点☆☆☆]
-
(4.2.1) C(Create):创建表
∮创建表:create table 表名称(列名1 数据类型1,列名2 数据类型,...);
创建一个user表(create table user(name vachar,age int);)
&数据类型
*int:整数类型
*double:小数类型
*date:日期,只包含年月日 yyyy-MM-dd
*datetime:日期,包含年月日时分秒 yyyy-MM-dd HH:mm:ss
*timestamp:时间戳类型 包含年月日时分秒 如果不给这个字段赋值,或赋值为NULL,则默认使用当前系统当前时间填充
*varchar:字符串
实例 name varchar(20) :name最大长度为20字节
∮复制表
create table 表名 like 被复制的表名;
-
(4.2.2) R(Retrieve):查询表
∮查询某个数据库中所有的表的名称: show tables;
∮查询表结构:desc 表名称; (可以显示该表的所有字段)
-
(4.2.3) U(Update):修改表
∮修改表名
alter table 表名称 rename to 新的表名;
∮修改表字符集
alter table 表名称 character set 字符集名称;
∮表添加一列
alter table 表名 add 列名 数据类型;
∮修改表中列名称、类型
alter table 表名 change 列名 新的列名 要修改的数据类型; //修改列名和类型
alter table 表名 modify 列名 要修改的数据类型; //修改列名类型
∮删除表中一列
alter table 表名 drop 列名;
-
(4.2.4) D(Delete):删除表
∮删除表
drop table 表名; // 直接删除,不存在会报错
drop table if exists 表名; ///先判断存在在删除
(5) DML操作表中记录[重点☆☆☆☆]
(5.1) 添加数据
(1)语法:insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n)
(2)注意:列名和值要对应,表面后不跟列名则给所有列赋值
(5.2) 删除数据
(1)语法:delete from 表名 [where 条件];
(2)注意:如果不加条件则删除表中所有的记录。危险,效率低,有多少条记录就删多少次!!
(3) 清空表记录然后创建一样的空表:truncate table 表名; 效率高
(5.3) 修改数据
(1)语法:update 表名 set 列名1=值1, 列名2=值2,....... [where 条件];
(2)注意:如果不加条件则修改表中对应列名的所有的记录。
(6) DQL查询表中记录[重点☆☆☆☆☆]
(6.1) 语法:
select 字段列表
from 表名列表
where 条件列表
group by 分组字段
having 分组之后的条件
order by 排序
limit 分页限定
(6.2) 基础查询
查询表里的所有数据 select * from 表名; // 查看表名中所有的记录
(6.2.1)多个字段的查询
select 字段名1,字段名2,... from 表名; // 查看表中指定字段的所有记录
实例:select phyic,math from student; //只显示student表中phyic和math字段所有记录
(6.2.2)去除重复
select distinct 字段名 from 表名; // 去除表中指定所有字段重复的记录
实例:select distinct phyic,math from student;
(6.2.3)计算列
select 字段名1,字段名2,字段名1+字段名2 from 表名;
实例1:select phyic,math, phyic+math from student;
实例2 如果math数据是NULL:select phyic,math, phyic+IFNULL(math,0) from student;
(6.2.4)起别名
实例1:select phyic,math, phyic+math As 物理数学分 from student; //将phyic+math起为[物理数学分]
实例2 可以省略AS:select phyic 物理分,math 数学分, phyic+math 物理数学分 from student;
//将phyic起为[物理分],math起为[数学分],phyic+math起为[物理数学分]
(6.3) 条件查询
(6.3.1)where子句后跟条件
实例:select * from student where age >= 20; // 查询表student年龄age大于等20的记录
(6.3.2)运算符
* >、<、<=、>=、=(等于)、<>(不等于 !=)
*BETWEEN......AND
*IN(集合)
*LIKE :模糊查询
占位符(_ ):单个任意字符
占位符(%):多个任意字符
实例:select name from student where '%h%'; ///student表中name字段中含有h字符的都列出
*IS NULL :是NULL 的
*IS NOT NULL : 不是NULL的
*and 或 &&
*or 或 ||
*not 或 !
(6.4) 排序查询
(6.5) 聚合查询
(6.6) 分组查询
(6.7) 分页查询