SQL介绍
1.什么是SQL ?
- Structured Query Languange:结构cmd化查询语言
其实就是定义了操作所有关系型数据库的规则。每一种数据库操作的方式存在不一样的地方,称为“方言”。
2.SQL通用语法
- SQL语句可以单行或多行书写,以分号结尾。
- 可使用空格和缩进来增强语句的可读性。
- MySQL数据库的SQL 语言不区分大小写,关键字建议使用大写。
- 3种 注释
- 单行注释:** -- **注释内容 或 # 注释内容(mysql特有)
- 多行注释:** /* 注释 /*
- /*! ... */
5.退出命令
quit;
exit;
ctrl + Z
3.SQL分类
1.DDL(Data Definition Language)数据定义语言
- 用来定义数据库对象:数据库、表、列等。关键字:create,drop,alter,show,use等
2.DML(Data Manipulatio Language)数据操作语言
- 用来对数据库中表的数据进行增删改。关键字:insert,delete,update 等
3.DQL(Data Query Language)数据库查询语言
- 用来查询数据库中表的记录(数据)。关键字:select,where 等
4.DCL(Data Control Language)数据控制语言(了解)
- 用来定义数据库的访问权限和安全级别,及创建用户。关键字:GRANY,REVOKE 等。
SQL操作
操作数据库
创建
1.创建数据库
2.数据库是不区分大小写ABC001 和 abc001是一样的;
3.命令也不区分大小写;
4.创建数据库的时候,名字的命名,只能是a-z,0-9,_ 组成,不能出现特殊字符,最好也不要用纯粹的0-9来命令,建议使用a-z,更具具体的事物去命名;
create database 数据库名称; --创建数据库
show databases; --显示数据库
drop database 数据库名称; --删除数据库
- 创建数据库,判断不存在,再创建:
create database if not exists 数据库名称;
- 创建数据库,并指定字符集
create database 数据库名称 character set 字符集名;
- 练习:创建db3数据库,判断是否存在,并指定字符集为gbk
create database if not exists db3 character set gbk;
mysql> create database abc003 character set gbk;
Query OK, 1 row affected (0.00 sec)
查询
- 查询所有数据库名称
show databases;
- 查询某个数据库的字符集:查询某个数据库的创建语句
show create database 数据库名称;
修改
- 修改数据库的字符集
alter database 数据库名称 character set 字符集名称;
删除
- 删除数据库
drop database 数据库名称;
使用
- 查询当前zhen正在使用的数据库名称
select database(); --查询当前使用的数据库
use 数据库名; --使用该数据库
操作表
use 数据库名称; --使用一个数据库
select database(); --查看当前数据库
show tables; --查看表
desc 表名; --查看列
创建
- 语法
create table 表名(
列名1 数据类型1,
列名2 数据类型2,
...
列名n 数据类型n
);-- 在创建一个数据表的时候,必须加上列名和数据类型,不然会报错;
最后一列,不需要加逗号
- 数据类型
1.int:整数类型
age int,-- 用的最多的 默认字符是11个,可以自己手动添加 age int(99); 最大 255
2.double:小数类型
score duoble(7,3) -- 前面大于等于后面
ERROR 1427 (42000): For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'score').
3.date:日期,只包含年月日,yyyy-MM-dd
4.datatime:日期,包含年月日时分秒 ,yyyy-MM-dd HH:mm;ss
5.timestamp:时间类型包含年月日时分秒 yyyy-MM-dd HH:mm;ss
如果将来不给这个字段赋值,或赋值为null,则默认使用当前的系统时间,来自动赋值
6.varchar:字符串
name varchar(20):姓名最大20的字符 -- varchar后必须定义字符长度,不然会报错
cainiao 7个字符 张三 2个字符
char
- 创建表
create table student(
id int,
name varchar(37),
age int,
score double(4,1),
birthday date,
insert_time timestamp
);
create table student(id int(99),name varchar(37),score double(4,1),birthday date,insert_time timestamp);
- 复制表
create table 表名 like 被复制的表名;
查询
- 查询某个数据库中所有的表名称
show tables; --查询表
- 查询表结构
desc 表名; --查询表中的列结构
修改
- 修改表名
alter table 表名 rename to 新的表名;
- 修改表的字符集
alter table 表名 character set 字符集名称;
删除
drop table 表名; --删除表
DDL:修改列
添加一列
alter table 表名 add 列名 数据类型;
修改列名称 类型
alter table 表名 change 列名 新列名 新数据类型;
alter table 表名 modify 列名 新数据类型;
删除列
alter table 表名 drop 列名;
查看列
desc 表名; -- 查看列
DML:增删改表中的数据
1.添加数据:
- 语法:
```mysql
insert into 表名(列名1,列名2,...列名n) values(值1,值2,...值n);
- 注意:
1.列名和值要一一对应。
2.如果表名后,不定义列名,则默认给所有列添加值。
insert into 表名 values(值1,值2,...值n);
2.删除数据:
- 语法:
delete from 表名 [where 条件]
delete from abc003 where id=1; -- 删除表abc003列中id=1值
- 注意:
- 如果不加条件,则删除表中所有记录。
- 如果要删除所有记录
- delete from 表名;-- 不推荐使用。有多少条记录就会执行多少次删除操作。
- TRUNCATE TABLE 表名; -- 推荐使用,效率更高 先删除表,然后再创建一张一样的表。
3.修改数据
- 语法:
update 表名 set 列名1 = 值1,列名2 = 值2,...[where 条件];
update abc003 set age=99 where id=3; -- 将表abc003中id=3的age的值修改为99
注意:
- 如果不加任何条件,则会将表中所有记录全部修改。
DQL:查询表中的字段
select * from 表名;
1.语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
group_concat()
分组查询
2.基础查询
1.多个字段的查询
select 字段名1,字段名2... from 表名;
注意:
- 如果查询所有字段,则可以使用*来替代字段列表。
2.去除重复
distinct
SELECT DISTINCT country FROM Websites;
SELECT * FROM Websites WHERE country='CN'AND alexa > 50;
SELECT * FROM Websites WHERE alexa > 15 AND (country='CN' OR country='USA');