SQL
1. 什么是SQL?
Structed Query Language:结构化查询语言
2. SQL通用语法
1. Sql可以单行或多行书写,以分号结尾。
2. 可以使用空格和缩进来增强语句的可读性。
3. Mysql的数据库SQL语句不区分大小写,关键字建议使用大写。
4. 3种注释
* 单行注释:--注释内容 或 #注释内容(mysql特有)
* 多行注释:/*注释内容*/
3. SQL的分类
1. DDL(Data Definition Languange)数据定义语言
用来定义数据库对象:数据库,表,列等。关键字:creat,drop,alter等
2. DML
用来对数据库表中的数据增删改。关键字:insert,delete,update等
3. DQL
用来查询数据库表中的记录(数据)。关键字:select,where等
4. DCL(了解)
用来定义数据库的访问权限和安全级别,和创建用户。关键字:GRANT,REMOVE等。
DDL:操作数据库,表
1. 操作数据库 :CRUD
1. C(create):创建
* 创建数据库;
* create database 数据库名称
* 创建数据库,判断不存在,再创建:
* create database if not exists 数据库名称
2. R(retrieve):查询
* 查询所有数据库的名称:
* show database;
* 查询某个数据库的字符集:查询某个数据库的创建语句
* show create database 数据库名称;
3. U(update):修改
* 修改数据库的字符集
* alter database 数据库名称 character set 字符集名称
4. D(delete):删除
* 删除数据库
* drop database 数据库名称:
* 判断数据库存在,存在再删除
* drop database if exists 数据库名称
5. 使用数据库
* 查询当前使用的数据库名称
* select database();
* 使用数据库
* use 数据库名称
MySql是一种关系型数据库
连接到mysql数据库:mysql -u root -p
什么是SQL:结构化的查询语句
SQL分类:
DDL:数据定义语言
- create,alter,drop…
DML:数据操纵语言
* update,insert,delete
DCL:数据控制语言
* grant,if..
DQL:数据查询语言
* select
数据库增删查改
创建数据库:语法:create database 数据库 [character 字符集 collate 校对规则]
查看数据库:
查看所有数据库:show databases;
查看某个数据库:show create database 数据库名;
修改数据库:语法:alter database 数据库名 character 字符集 collate 校对规则
删除数据库:语法:drop database 数据库名;
切换数据库:use 数据库名;
查看当前使用数据库:select database();
数据库表操作
创建表语法:
create table 表名 (
字段名 类型(长度) 约束,
字段名 类型(长度) 约束,
字段名 类型(长度) 约束
);
数据类型:
Java类型: MySQL:
byte/short/int/long tinyint/smallint/int/bigint
String char/varchar
* 区别?char是固定长度的字符串,varchar可变长度的字符串.
* char(8) 和 varchar(8)
* 如果插入一个字符串hello 插入到char 那么 插入hello .插入到varchar中 插入hello
float float
double double
boolean bit
Date date/time/datetime/timestamp
* datetime和timestamp都是既有日期又有时间的日期类型
* 区别? datetime需要使用外部传入的日期.如果没传这个值就是Null. timestamp会使用系统当前的时间作为这个值的默认值.
文本文件 Text
二级制文件 BLOB
***** Oralce使用CLOB/BLOB
***** MYSQL中除了字符串类型需要设置长度其他的类型都有默认长度******
约束:
单表约束:
-
主键约束:primary key (默认就是唯一非空的)
-
唯一约束:unique
-
非空约束:not null
创建一个表:
***** 创建表之前先选择数据库:use 某个数据库;
create table employee(
eid int primary key auto_increment,
ename varchar(20) not null,
email varchar(30) unique,
birthday date,
job varchar(20),
resume text
);
【表的查看】
查看数据库中有哪些表:
- show tables;
查看表结构:
- desc 表名;
【表的删除】
表的删除:
drop table 表名;
【表的修改】
修改表添加列:
-
alter table 表名 add 列名 类型(长度) 约束;
- alter table employee add image varchar(50);
修改表删除列:
-
alter table 表名 drop 列名;
- alter table employee drop job;
修改表的列的类型长度及约束:
-
alter table 表名 modify 列名 类型(长度) 约束;
- alter table employee modify image varchar(80) not null;
修改表的列名
-
alter table 表名 change 旧列名 新列名 类型(长度) 约束;
- alter table employee change image eimage varchar(60);
修改表名
-
rename table 旧表名 to 新表名;
- rename table employee to user;
修改表的字符集:
-
alter table 表名character set 字符集;
- alter table user character set gbk;
*使用SQL操作数据库中的表的记录(对表的记录的CRUD的操作)
【插入记录】
语法
-
insert into 表名 (列名,列名,…) values (值1,值2,…); —插入指定列的值
-
insert into 表名 values (值1,值2,…); —插入所有列的值
注意事项:
-
列名的个数与值的个数对应.
-
列的类型与值的类型对应.位置也要对应.
-
列的类型如果是字符串或者日期,写值的时候使用单引号将值引起来.
-
插入的值的最大长度不能超过列的最大长度.
【修改记录】
语法:
- update 表 set 列名=值,列名=值 [where 条件];
注意事项:
-
列名和值类型也要一致.
-
值不能超过列的最大长度.
-
值是字符串或日期,需要使用单引号.
练习:
-
修改employee表中所有记录的job为WORKER
- update employee set job=‘WORKER’;
-
修改employee表将name为aaa的邮箱改为aaa@163.com
- update employee set email = ‘aaa@163.com’ where ename = ‘aaa’;
-
修改employee表将name为bbb的邮箱改为bbb@163.com同时修改job为HR
- update employee set email = ‘bbb@163.com’ , job=‘HR’ where ename=‘bbb’;
【删除记录】
语法:
- delete from 表 [where 条件];
注意事项:
-
删除表中的一行记录,不能删除某列值
-
如果没有条件删除表中的所有列.
练习:
-
删除id为8的记录:
- delete from employee where eid = 8;
-
删除所有记录:
- delete from employee;
删除表中的所有记录truncate table 表名 和 delete from 表 区别?
-
区别:
-
truncate table 删除表的记录:将整个表删除掉,重新创建一个新的表.truncate属于DDL.
-
delete from 删除表的记录:一条一条进行删除. delete属于DML。
- 事务管理 只能作用在DML语句上.如果再一个事务中使用delete删除所有记录,可以找回.
-
【基本查询】
查询语句:
- select [distinct] *|列名 from 表 [where 条件];
【条件查询】
where语句后面可以加:
条件的关键字:
= , > , >= , <, <= , <>
like中可以使用占位符: _ 和 % :下划线匹配一个字符, %:可以匹配任意多个字符.
【排序查询】
`order by 对数据进行排序.默认升序. (asc升序,desc降序)
【聚合函数】
`sum() 求和
`count() 统计
`max() 最大值
`min() 最小值
`avg() 平均数
【分组】
group by
-
交叉连接:
- select * from A,B; — 获得的是两个表的笛卡尔积.
-
内连接: inner join – inner 可以省略
-
显式内连接:select * from A inner join B on 条件;
-
隐式内连接:select * from A,B where 条件;
-
-
外连接:outer join – outer 可以省略
-
左外连接:left outer join – select * from A left outer join B on 条件;
-
右外连接:right outer join – select * from A right outer join B on 条件;
-
【多表查询的子查询】
一个SQL语句查询的过程中需要依赖另一个查询语句.
SELECT * FROM customer c,orders o WHERE c.cid = o.cid AND c.cid IN (SELECT cid FROM orders WHERE addr LIKE ‘海淀%’);
来源:CSDN
作者:YellowPeaches
链接:https://blog.csdn.net/deansensitive/article/details/104669812