数据库相关SQL
一、数据库操作
- 查看所有数据库
格式:show databases ; - 创建数据库
格式:create database 数据库名 character set 字符集(utf8/gbk);
举例:
create database db1;#创建db1数据库:
create databese db2 character set utf8;#创建db2数据库,字符集为 utf8;
create databese db3 character set gbk;#创建db3数据库,字符集为gbk; - 查看数据库详情
格式:show create database 数据库名;查看数据库
show create database db1;#查看数据库db1的信息,包括字符集等信息; - 删除数据库
格式:drop database 数据库名;
举例:
drop database db1;#删除数据库db1; - 使用数据库
格式:use database 数据库名;
举例:
use database db1;#使用数据库db1,之后操作表的数据都是在此数据库下操作。
二、数据库中的表操作
-
创建表(创建表之前请先使用use指定数据库)
格式:create table 表明(字段1名 类型,字段2名 类型…)charset=utf8/gbk;
举例:
create table t1(name varchar(13),age int) charset=utf-8;#创建表t1,字段名为:name,age;
–根据已有的表格创建新表:
举例:
create table t1_new like t2_old;
创建 备份数据的device
use master;
exec sp_addumpdevice ‘disk’,testBack’,‘c:\mssql\mynwind_1.dat’;
–开始备份
backup database pubs to testBack; -
删除表
删除新表:drop table t1; -
字段;
显示表字段:desc t1;
删除字段:alter table t1 drop col_name;
修改字段:alter table t1 change col_name_old col_name_new varchar(13); -
列:
alter table t1 add column col type;
举例:在t1表中增加一列name,类型varchar(13);
alter tbale t1 add name varchar(13);//默认在最后,可使用first或者after col_name改变位置 -
主键:
新建字段设置:(not null–非空,primary key(col)–添加主键,auto_increment–自增,唯一约束:unique)
修改主键:alter table t1 add primary key(col_name);
删除主键:alter tbale t1 drop primary key(col_name);
自增 :create table t1 (id int auto_increment);
唯一约束:create table t1 (id int unique); -
索引:
创建索引:create -
数据库中的增删查改:
增:insert into table t1(col_1,col_2) values(val_1,val_2);
删:delete from t1 where id=1;//注:没有条件将删除整个表;
改:update t1 set id=1 where name=“val”;
查:
a).简单查询:select * from t1;
b.)排序查询:select * from t1 order by id,name desc;//默认升序,desc倒序;
c.)计数:select count(*) from t1;
d.)求和、平均、最大、最小:select sum(col)、avg(col)、max、min、from t1 ;
三、sql进阶
-
导入sql 语句:
source /home/emp.sql//注:运行后出现乱码是因为控制台的编码方式不一致,需要设置:set names gbk; -
判断是否null:
is not null或者is null;
select * from t1 where id is null; -
关系运算符:
> < >= <= = !=
select * from t1 where id>100 -
逻辑运算符:
and 和or
select * from t1 where id is null and name=“test”; -
关键字:
a).between在什么之间:
select * from t1 where id between between 1000 and 2000;
b).in包含:
select * from t1 where id(10,20,30);
c). like模糊查询:
以x开头’x%’;以x结尾’%x’;包含x’%x%’;第二个字符是x’_x%’;
select *from t1 where name like ‘孙%’;
d). group by 分组查询:
select * from t1 group by id;//查询的结果根据id列的值进行分组查询;
d.)having where后面智能写普通的字段条件,having 结合分组查询,在having后面接聚合函数
查询每个部门工资sal大于平均工资的部门empno:
select empno,avg(sal) from t1 group by empno having sal>avg(sal);
关键字总结:
select 字段信息;
from 表名;
where 条件;
group by 字段;
having 聚合条件;
order by (desc倒叙)排序查询;
limit 跳过几条,查询几条; -
分页查询:
分页查询公式显示第几页公式:limit((页数-1)*第几条数据,第几条数据)
–如:显示第3页第5条数据:
select * from t1 limit 6,5;
查询工资在1000到5000之间的第4页的第3条数据
select sal from t1 where sal between 1000 and 5000 limit 9,3; -
数值查询:
在查询结果中查询数据的结果值;如:
select sal3,name from t1 ;//即查询的结果是 工资列sal从数据库中的数据3进行显示;
四、sql高级查询
- 子查询(嵌套查询):在一条sql语句中,出现表达式的位置又写另一条sql数据;
举例:查询工资(sal)高于1号部门(deptno=1)平均工资的员工信息
select * from t1 where sal>(select avg(sal) from emp where deptno=1); - 关联查询(等值连接,内连接,外连接):
a).等值连接:格式(select 字段信息 from A,B where 关联关系 and 其它条件)
举例:emp dept两个表分别存着部门员工的不同信息,关联列deptno
select * from emp e ,dept d where e.deptno=d.deptno and sal>2000;
b).内连接:格式(select 字段信息 from A jion B on 关联关系 where 其它条件: )
举例:emp dept两个表分别存着部门员工的不同信息,关联列deptno
select * from emp e jion dept d on where e.deptno=d.deptno;//等值连接和内连接查询结果一样,建议使用内连接;
c).外连接:格式(select 字段信息 from A left/right join B on 关联关系 where 其它条件)
举例:emp dept两个表分别存着部门员工的不同信息,关联列deptno
select e.ename,d.* from emp e left join dept d on d.deptno=e,deptno;
总结:如果查询的是两张表的交集数据,则使用等值连接,或者内连接(推荐);
如果查询的是一张表的全部和另一张表的交集数据,则使用外连接;
到此结束!!!