sql语句(mysql)

MySQL
1.数据库数据类型
int 整型
double 浮点型 如double(5,2)最多5位,其中有两位小数
char:固定长度字符串,如char(255),数据长度不足会用空格补足
varchar 可变长度字符串
固长比变长更节省空间
text(clob):字符串类型ccc

net stop mysql 停止MySQL服务
net start mysql 启动MySQL服务

sql语句
dcl data control language 数据控制语言,用来定义访问权限和安全级别
ddl data definition language 数据定义语言
用来定义数据库对象,库、表、列
dql data query language 数据查询语言 用来查询记录
dml data manipulation language 数据操作语言 用来定义数据库记录

dcl 对用户的创建 及授权
ddl 数据库或表的结构创建
dql 对表的记录查询
dml 对标的记录进行更新

DDL
show databases; 查看所有数据库
use 数据库名; 切换数据库
create database 数据库名; 创建数据库
create database if not exists 数据库名;如果不存在则创建
drop database 数据库名;删除数据库
drop database if exis 数据库名;删除数据库,如果存在
alter database 数据库名 charset set utf8 修改数据库编码

create table 表名(列名1 数据类型,列名2 数据类型,....);创建表
show table;查询所有表
desc 表名;查询表结构
drop table 表名;删除表
alter table 表名 add(列名,数据类型,....)添加列
alter table 表名 modify 列名 类型;修改列名和列类型
alter table table_name change old_column_name new_column_name;
修改列名
alert table 表名 drop 列名;删除列
alter table 表名 rename to 新表名;重命名表

DQL
select * from 表名;查询表中的所有数据
insert into table (列名1,列名2,...)values(值1,值2,...);
向表中插入数据

update 表名 set列名 = 列值 where 条件 = 条件值;修改列

条件查询运算符
<>不包含=;
or 或者
and 并且
not 非
in(),在括号中

DCL
create user 用户名@IP地址 identified by '密码'; 创建用户,
只能在指定的IP登陆
create user 用户名@'%' identified by '密码';
创建用户,不受IP限制

grant 权限1,...权限n on 数据库.* to 用户名@ip地址
给用户授权

revoke 权限1,...权限n on 数据库.* from 用户名@ip地址
移除用户权限

show grants for 用户名@ip地址; 查看用户权限
drop user 用户名@ip地址;删除用户

DQL

SELECT distinct 列名 from 表名;查询不重复的记录

任何东西和null相加 都为null
select sal +comm from emp;
因此我们加一个函数
select ifnull(列名,值用来替换null) from emp;mysql用ifnull
select sal+ifnull(comm,0) from emp;mysql用ifnull
select sal+nvl(comm,0)from emp;oracle 用nvl
将ename和job连起来
select concat(ename,job) from emp;
可以为查询结果添加别名
select concat(ename,job)as 别名 from emp;

模糊查询
select * from emp where ename like '张_' 查询姓张的名字两个字
select * from emp where ename like '___' 查询名字是三个字的
select * from emp where ename like '%刚' 查询名字有刚的
select * from emp where ename like '王%' 查询姓王的
select * from emp where ename like '%王%' 查询名字中含王的

排序
order by
select * from 表名 order by 列名 升序或者降序
select * from emp order by sal asc
asc 升序,desc降序

多列排序
select * from 表名 order by 列名 升序或者降序,
列名 升序或者降序,列名 升序或者降序....
select * from emp order by sal asc,com desc,empo asc;

聚合函数
select count(*) from emp;查询有效行数,一行全是null不计数
select count(列名) from emp;查询有效行数,值为null的不计数

select sum(sal) from emp;计算总和
select max(sal) from emp;计算最大值
select min(sal) from emp;计算最小值
select avg(sal) from emp;计算平均值

分组查询
group by
select 分组列,聚合函数 from 表名 group by 字段;
根据相应的字段分组,中间只能放分组列和聚合函数

hvaing
select 分组列,聚合函数 from 表名 where 条件 group by 分组列
having 分组后条件(用聚合函数做条件)

select deptno ,count(*) from emp where sal>10000 group by
deptno having count(*)>3;以部门分组 工资大于10000的人数大于3个的

关键字:
select
where
group by
having
order by
他们的执行顺序也是如此

mysql方言limit
select * from emp limit 0,5;从第一行开始 查5行

mysql的编码
show variables like 'char%';查看mysql数据库编码;
在my.ini配置文件中配置,可以一劳永逸的解决乱码问题。
将default-character-set = gbk设置一下

mysql备份与恢复
数据库-->sql语句
sql语句-->数据库

数据库导出sql脚本(备份数据库内容,不是数据库)
mysqldump -u用户名 -p密码 数据库名>c:/a.sql(路径)

恢复
mysql -u用户名 -p密码 数据库名<c:/a.sql(路径)
sho

约束
主键约束特点:
非空
唯一
被引用<外键可以引用主键>

创建主键:
一种:create table table_name (
colunm_name1 类型 primary key,
colunm_name2 类型 primary key,
...
);
二种:create table table_name (
colunm_name1 类型,
colunm_name2 类型,
primary key(colunm_name1)
);
三种:create table table_name (
colunm_name1 类型,
colunm_name2 类型,
);
alter table table_name add primary key(colunm_name1);

删除主键:
alter table table_name drop primary key;

主键自增长
create table table_name (
colunm_name1 类型 primary key auto_increment,
colunm_name2 类型 ,
...
);
实际开发中大不分使用uuid作为主键

非空约束
create table table_name (
colunm_name1 类型 primary key auto_increment,
colunm_name2 类型 not null,//非空约束
...
);
唯一约束
create table table_name (
colunm_name1 类型 primary key auto_increment,
colunm_name2 类型 unique,//唯一约束
...
);

外键约束特点
外键必须是另一个表的主键(外键必须是引用主键)
外键可以重复
外键可以为空
一张表中可以有多个外键

创建外键
一种:创建表的时候就创建外键
create table emp(
empno int primary key auto_increment,
ename varchar(50),
deptno int,
constraint fk_emp_dept foreign key(deptno)
references dept(deptno)//创建外键
);
二种:创建完表之后将某个字段设为外键
create table emp(
empno int primary key auto_increment,
ename varchar(50) not null,
deptno int
);
alter table emp add constraint fk_emp_depe foreign key
(deptno) references dept(deptno);

删除外键
alter table 表名 drop foreign key 外键名;

一对一中将主键设为外键
多对多需要关联表,将需要关联的表的主键设为外键

多表查询
一、合并结果集
表结构必须相同

select * from 表1
union all
select * from 表2 //将表1和表2的结果集合并

select * from 表1
union
select * from 表2 //将表1和表2的结果集合并,相同的只显示一条

注意union all和 union的区别

二、连接查询
内连接
mysql方言版:
select * from 表1,表2 where 表1.xx = 表2.xx;
标准版:
select * from 表1 inner join 表2 on 表1.xx = 表2.xx;
自然:
select * from 表1 natural join 表2 on 表1.xx = 表2.xx;
自然连接会自动找两张表中相同的列进行匹配,不需要加条件
外连接
外连接有一主一次,左外及左表为主,右外及右表为主
左外连接(包含左边的所有项)
select * from 表1 left outer join 表2 on 表1.xx = 表2.xx;

右外连接(包含右边的所有项)
select * from 表1 right outer join 表2 on 表1.xx = 表2.xx;
自然连接

笛卡尔积

子查询
:查询中有查询,看select的个数
1.出现的位置
where后作为条件存在
from后作为表存在(多行多列)
2.条件
单行单列
select * from 表1 别名1 where 列1 [=、>、<、>=、<=、!=] (select 列 from 表2 别名2 where 条件)
多行单列
select * from 表1 别名1 where 列1 [in、>all、>any] (select 列 from 表2 别名2 where 条件)
单行多列
select * from 表1 别名1 where (列1、列2) in (select 列1、列2 from 表2 别名2 where 条件)
多行多列
select * from 表1 别名1 , (select...)别名2 where 条件

上一篇:Linux运维工程师成长路线及应实现的目标


下一篇:Jarvis OJ- [XMAN]level2/3_x64-Writeup——64位简单栈溢出