加载中...

常用的SQL语句

 1.     数据库操作:

创建数据库

create database  数据库名;

查询数据库

show databases;

删除数据库

drop database 数据库名;

选择或切换数据库

use 数据库名;

 

 

2.数据表操作:

 

创建数据表

create table 表名(

列名1(字段名1) 类型 约束,

列名2(字段名2) 类型 约束,

列名3(字段名3) 类型 约束

);

 

常见数据类型:

int 整型

double 浮点型

varchar 字符串类型

date 日期类型,格式为yyy-mm-dd 年月日

 

主键约束:

primary key  主键约束  唯一  非空

auto_increment 让主键列数据,实现自动增长

 

其他约束

not null  非空约束

default  默认值约束

unique  唯一约束

 

给列表添加外键约束

格式:

CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES 要关联的表名(主键);

第二中添加方式(创建表后追加):

ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY(外键字段) REFERENCES 要关联的表名(主键);

 

 

查看所有数据表

show tables;

查看表结构

desc 表名;

删除表

drop table 表名;

 

添加列

alter table 表名 add 列名  数据类型 约束;

 

修改列数据类型

alter table 表名 modify 列名 数据类型 约束;

 

修改列名

alter table 表名 change 旧列名 新列名  数据类型;

 

删除列

alter table 表名 drop 列名;

 

修改表名

rename table 表名 to 新名;

 

修改表字符集

alter table 表名  character set 字符集;

 

向表里添加数据 insert

insert into 表名(列名1,列名2,列名3) values (值1,值2,值3)

添加数据,不考虑约束

insert into 表名(列名) values (值);

添加数据,全值给出

insert into 表名 values (全列值);

添加数据,批量添加

insert into 表名

 

对数据进行修改

update 表名  set 列1=值1 where 条件

where条件:找数据中的唯一性

 

条件判断语:

&&  and

II   or

!  ont

 

BETWEEN ... AND 会选取介于两个值之间的数据范围。这些值可以是数值、文本或者日期。

 

删除数据

delete from 表名 where 条件

 

truncate table 表名

注意(truncate是连主键也删除的)

 

数据库查询基本语句

select 列名1,列名2 from 表名

 

select 列名  as 表名  from 表名

注:1.as是暂时修改列名

2.可以使用select查询关键字进行运算,包括对列的数据

 

查询所有

select * from 表名;

 

distinct去除重复记录

select distinct 列名 from 表名;

 

数据库条件查询语句

where语句表条件过滤。满足条件操作,不满足不操作,多用于数据的查询与修改。

格式 :

select 字段  from 表名  where 条件;   

select * from 表名 where 条件;

 

in的使用:

IN (value1,value2,...)
出现在where后面,可以添加多个条件

 

查询,对查询结果进行升序排列

升序  desc

降序 asc

 

order by 列名

select * from 表名 order by 列名  升序或者降序

注意:默认升序,升序时不写desc也可以

 

聚合函数:

count:统计指定列不为null的记录行数;

sum:计算指定列的数值和,如果指定列类型不是数值类型,那么计算结果为0;

max:函数,某列数据,获取最大值;

min:函数,某列数据,获取最小值;

avg:计算指定列的平均值,如果指定类型不是数值类型,那么计算结果为0;

例如:select count(*) from 列名;    

 

分组查询

qroup by 被分组的列名

注意:1.必须跟随聚合函数;

2.select 查询的时候,被分组的列,要出现在select 选择列的后面

3.结果集是分组查询后,再次进行筛选,不能使用where

 

分组查询关键字:

having 是在分组后对数据进行过滤

where 是在分组前对数据进行过滤

 

//对于有外键的表进行清空报错,code:1701错误

//关闭外键约束
SET FOREIGN_KEY_CHECKS=0;
//开启外键约束
SET FOREIGN_KEY_CHECKS=1;

 

模糊查询
条件添加在like字段后面
_    包含一个字符
____i   五个字符组成第五个字符是i
i%   以i开头,%号代表任意个字符
%i   以i结尾的字符
%i%   包含i的字符

limit i,n
i表示开始的索引
n表示几条数据
例:
select * from Customer LIMIT 10;
# 检索前10行数据,显示1-10条数据
select * from Customer LIMIT 1,10;
# 检索从第2行开始,累加10条id记录,共显示id为2....11
注意:limit用于分页,是MySQL独有的,sql sever与Oracle没有这种用法

合并两张表查询
union 去除重复
select * from 表1 union select * from 表2;

union all 不去除重复

笛卡尔积  t1(4) * t2(4) = 4*4条

去除笛卡尔积
select * from 表1 别名, 表2 别名 where 条件
说明:
1.条件最好用"别名.字段"的方式
2.字段最好不用*(全部字段),可以挑选需要的字段

内连接 INNER JION
上面的语句就是内连接,但是不是标准的sql语句标准的内连接为:
select * from uesr u inner join info i on u.id=i.uid;

外连接(左连接和右连接)
特点:查询出的结果存在不满足条件的可能

左连接LEFT JOIN
select * from uesr u left join info i where u.id=i.uid;
说明:是先查询出左表(即以左表为主),然后查询右表,右表中满足条件的显示出来,不满足条件的显示NULL。

右连接RIGHT
select * from uesr u right join info i where u.id=i.uid;
左右表不满足条件时,左表显示Null,右表显示数据

 

自然连接

两张连接的表中名称和类型完全一致的列作为条件,例如emp和dept表都存在deptno列,并且类型一致,所以会被自然连接找到!

select * from t_employee natural join t_department;//自然连接

SELECT * FROM t_employee  inner JOIN t_department using(depno);//等同于自然连接

 

当然左右连接也可以使用自由连接

select * from t_employee natural left join t_department;//左自然连接

 

select * from t_employee natural right join t_department;//右自然连接

 

子查询

子查询概念:

一个select语句中包含另一个完整的select语句。

子查询就是嵌套查询,即SELECT中包含SELECT,如果一条语句中存在两个,或两个以上SELECT,那么就是子查询语句了。

l  子查询出现的位置:

  • where后,作为查询条件的一部分;
  • from后,作表;

l  当子查询出现在where后作为条件时,还可以使用如下关键字:

  • any
  • all

l  子查询结果集的形式:

  • 单行单列(用于条件)
  • 单行多列(用于条件)
  • 多行单列(用于条件)
  • 多行多列(用于表)

 

#例:查询高于JONES的员工

SELECT * FROM emp WHERE sal > (SELECT sal FROM emp WHERE ename='JONES')      

#子查询作为条件,子查询形式为单行单列

 

SELECT * FROM emp WHERE sal > ALL [大于所有](SELECT sal FROM emp WHERE depno=30)

说明:子查询形式为多行单列(当子查询结果集形式为多行单列时可以使用ALL或ANY关键字)

 

SELECT * FROM emp WHERE (job,sal) IN (SELECT job,sal FROM emp WHERE ename='MARTIN')

#子查询作为条件,子查询形式为单行多列

 

SELECT e.ename,e.sal,d.name,d.location

FROM emp e,(SELECT depno,name,location FROM depart) d

WHERE e.depno = d.depno AND e.empno = '7788';

#子查询作为表,子查询形式为多行多列

#因为笛卡尔积较少所以比较快

 

 

事务

begin; # 开始事务

commit; # 提交事务

 

rollback; # 回滚事务

 

SET AUTOCOMMIT=0 禁止自动提交

SET AUTOCOMMIT=1 开启自动提交

posted @ 2018-12-18 10:23  royal6  阅读(244)  评论(0编辑  收藏  举报