SQL语言 2020.11.16
SQL语言
SQL语言简介
概述:sql语言是一门特殊查询语言、全称是结构化查询语言简称sql、主要可以对数据库中的数据进行增删改查。
根据sql语言功能类型不同可以划分为以下几种
DDL数据定义语言:主要就是创建、修改、删除数据库以及数据库表
DML数据操作语言:主要就是对数据库中表数据的增删改
DQL数据查询语言:主要就是对数据库中表数据的查询操作
DCL数据管理语言:DBA职位给程序员创建用户并且给用户配置角色和相对应的权限
MySQL中的数据类型
.
tinyint 短整形 表示-128 — 127
int 表示整形数值 表示2^32
在java中有boolean类型,在mysql中没有 我们通常使用int 去表示 0表示false 1表示true
float 单精度小数
double 双精度小数
char 固定长度的字符串(比如说我们给属性上用char类型长度放5,那么就表示该字段最大只能放5个字符长度的值、如果放的值不足5个字符它会默认用空格进行填充)
varchar 可变的字符串(比如说我们给属性上用varchar类型长度放10,那么久表示该字符最大只能放10个字符值、如果放的值不足10个字符它会自动的缩减容量)
date 年月日
time 时分秒
dateTime 年月日时分秒
timestamp 时间戳(年月日时分秒)
区别:
dateTime 年月日时分秒可以表示最大日期是9999年12月31日 23:59:59秒 默认值是null
timestamp 年月日时分秒表示的日期是从1970- 1月1日 8:00开始 到2037年12月31日 23:59:59秒 默认值是当前日期
DDL数据定义语言
概述:DDL数据定义语言:主要就是创建、修改、删除数据库以及数据库表
create:创建
alter:修改
drop:删除
show:展示
DDL之数据库的操作
创建数据库
语法格式:create database 数据库名称
如果创建了已存在的数据库会报一下错误
解决:可以在创建数据库的时候先判断当前数据库是否在数据库系统中存在、如果存在不创建、如果不存在就创建
语法格式:create database if not exists 数据库名称
查询服务器上已存在的所有数据库
语法格式:show databases;
使用当前要操作的数据库:
语法格式:use 数据库名称
修改数据库字符集
语法格式:alter database 数据库名称 character set 字符集
查看当前数据库的信息(包含默认字符集):
语法格式:show create database 数据库名称
删除数据库
语法格式:drop databse 数据库名称
DDL之数据表的操作
创建数据表
语法格式: create table 表名(
字段名称 字段类型,
字段名称 字段类型,
字段名称 字段类型
);
注意事项
1、字段和字段之间必须用,号隔开、最后一个字段不需要加,
2、如果字段类型是字符串或者是字符类型必须给长度
查看表结构:desc 表名;
查看表的创建信息:show create table 表名
查看当前数据库中的所有表
语法格式:show tables;
修改表名
语法格式:alter table 表名 rename 新名称
新增一列
语法格式:alter table 表名 add 字段 字段类型
--在所有列末尾添加新列
– 在某个指定列后面插入新列
语法格式 alter table 表名 add 字段 字符类型 after 已存在的字段
--在表的第一列前面添加新列
语法格式 alter table 表名 add 字段 字段类型 first;
删除列
语法格式:alter table 表名 drop 列名
修改列
语法格式:alter table 表名 modify 列名称 新类型
--不能修改列名,只能修改列信息
-可以修改列名及其他信息
alter table 表名 change 老列名 新列名 新类型
区别:modity只能修改列的类型、change既可以修改类型、也可以修改列名称
删除表
语法格式:drop table 表名
DML数据操作语言
概述:DML数据操作语言主要对数据库表中数据增删改
insert 添加
update 修改
delete 删除
insert添加操作
添加操作分为单行添加和多行添加。
单行添加
方法1:
语法格式:insert into 表名(列1,列2,列3…) values(值1,值2,值3…)
注意实现:
1、列和值必须一一对应
2、值如果是数值直接插入即可、如果是除数值外的其他类型加单引号或者双引号其中一种
示例:向学生表student中添加一条记录
方法2:
语法格式:insert into 表名 set列1=值1,列2=值2,列3=值3…
示例:向学生表student中添加一条记录
方法1的变形:可以省略列名,但要求值的个数和顺序必须与表中保持一致。
语法格式:insert into 表名 values(值1,值2,值3…)
示例:向学生表student中添加一条记录
多行添加
语法格式:insert into 表名(列1,列2,列3…) values(值1,值2,值3…),(值1,值2,值3…),(值1,值2,值3…)
示例:向学生表student中同时添加多行记录
update修改操作
语法格式:update 表名 set 列1=新值,列2=新值,列3=新值… [where 条件]
注意:在修改数据的时候如果不加where条件默认是将表中所有的数据都修改
示例:
#修改单个列的数据
示例:将仓啊空修改为苍井空
#同时修改多列数据
将波多野结衣1改为武藤兰 数据全部修改
#无条件修改表中所有行的该列数据都会变 - 谨慎使用
delete删除操作
语法格式:delete from 表名 [where 条件]
示例:删除仓啊空1
#条件删除
#删除全部delete from 表名
方式一:
方法二:
语法格式:truncate table 表名
面试问题
delete from 与 truncate table 删除表区别
方式上
delete from删除方式会将表中数据逐条删除、而truncate table 直接删除整个表、创建创建一个一模一样表结构的新表
效率上
truncate table 删除效率要远远高于delete from
回滚上
delete from 删除的数据可以回滚、truncate table删除数据不可以回滚
自增上
delete from 删除后数据自增的序列还保留着、truncate table删除后数据自增序列从1开始
#无条件删除表中所有的数据-谨慎使用
DQL数据查询语言
DQL(Data Query Language)数据查询语言,主要是针对数据表做查询操作。查询操作只是根据用户需求从原始数据表中筛选出符合查询条件的结果集,对原始表的数据没有任何影响。
查询关键字:select
查询全部数据
语法格式:select * from 表名 *:表示展示所有列
筛选部分列
语法格式:select 列名列表 from 表名
示例:只展示员工的姓名ename和员工的薪资sal
查询列上起别名
格式select 列名 as 别名,列名 as 别名 from 表名
as 可以省略
给表起表名
语法格式:select 别名.列名,别名.列名 from 表名 别名
条件查询查询所有经理的信息 where
语法格式:select * from 表名 where 条件
查询不是经理的信息 != <>
语法格式:select * from 表名 where 条件
多条件查询 and
格式:select * from 表名 where 条件1 and 条件2
示例:查询工作是经理、并且工资大于2500的员工信息
范围查询
>= <= between 区间1 and 区间2
格式:select * from 表名 where 字段 >= 值1 and 字段<= 值2
select * from 表名 where 字段 between 值1 and 值2
示例:查询工资在1000-3000之间的员工信息
区间查询
模糊查询 like
查询带A的员工
%:表示0个到多个任意字符
格式select * from 表名 where 字段 like ‘%A%’
查询姓A且名字只有5个字的员工信息
_:表示一个任意字符
格式select * from 表名 where 字段 like ‘A____’
查询员工姓名中第二个字符是A的
’_A%’
格式select * from 表名 where 字段 like ’_A%’
空值查询
is null为空 is not null 不为空
格式:select * from 表名 where 字段 is null
限制返回行查询
(分页查询)limit 0,3 0:从索引几开始 3:要几条
查询表中前三条记录
格式 select * from 表名 limit 0,3
分页查询
每页显示3条记录,查询第1页数据
算起始索引的公式
(当前页-1)*每页显示条数
查询排序
desc 降序 asc 升序 默认
格式:select * from 表名 order by 字段 desc/ asc
去重查询
distinct 表示去除重复
格式:select distinct 字段名 from 表名