单表语句:
(1)查询一个表中的所有语句
格式: select * from 表名;
select * from hz10
注意:*号表示所有,每个语句后面加上分号
(2)查询表中具体的字段
格式:select 字段名1,字段名2,字段名3 from 表名;
select name from hz10;
(3)查询表中具体的字段取别名(别名是为了在查看数据时方便)
格式:select 字段1 as “姓名” ,字段2 “年龄” from 表名
select name as “姓名”,age “年龄” from hz10;
备注:as可以省略不写,as表示取别名
比较运算符
(1)查询指定内容,用where 字段名=字段
select * from emp where dept2=101;
where条件使用注意:
比较运算符
where +条件(=(等于),!=(不等于),<>(不等于),<(小于),>(大于),>=(大于等于),<=(小于等于))
(2)and(与)
同时满足所有条件,比如同时满足条件1,条件2
select * from emp where dept2 >=102 and age=57;
(3)or(或)
有多个条件时,满足其中任意1个条件都显示,条件1和条件2同时存在,只要满足条件1就显示,只要满足条件2就显示
select * from emp where dept2 =102 or age=57;
(4)between .....and.....在什么范围之间
select * from 表名 where 表字段 between 值的范围 and 值的范围
select * from 表名 where age between 25 and 55;
(5)in 在一组数据中匹配
格式:select * from 表名 where 字段名 in (数组值1,数组值2,数组值3);
select * from emp where dept2 in(101,102,103);
(6)is null
6.1 is not null 非空
格式:select * from 表名 where 字段名 is not null;
select * from emp where age is not null;
6.2 is null 为空
格式:select * from 表名 where 字段名 is null;
多行注释:ctrl+/
取消多行注释:ctrl+shift+/
单行注释:#
============================================================================
简表讲解
dept部门表
emp员工表
排序:
对表中的内容进行排序:
order by:排序
asc:升序
格式:select * from 表名 order by 字段名 asc;
案例1:select * from emp order by age asc;
案例2:select * from emp order by age; (不填asc)
desc:降序
格式:select * from 表名 order by 字段名 desc;
案例:select * from emp order by age desc;
二次排序:
格式:select * from 表名 order by 字段1 desc ,字段2 desc;
select * from emp order by dept desc ,incoming desc;
模糊匹配查询 like
%:表会匹配0个字符或多个字符
_:表示一个字符
select * from emp where dept2 like “1%” ; 匹配1开头的部门编号数据
select * from emp where dept2 like “%2%” ; 匹配的部门包含2编号数据
select * from emp where dept2 like “%2” ; 匹配结尾包含2编号数据
select * from emp where dept2 like “_2” ; 匹配固定的字符2编号数据
限制查询(limit) 后面连接2个值,第一个值 表示下标(索引),第二个值是步长
备注:一个表中索引是从0开始的
格式:select * from 表名 limit 索引,行数;
select * from emp limit 0,3; 从首行开始取3行
select * from emp limit 2,3; 从第二行开始取3行
select * from emp limit 3;直接查询3行
分组查询 group by
group by 一般和having 组合
案例:select dept2 ,max(age) from emp group by dept2 选出dept2中年龄最大的
group by 一般不会单独使用,通常都是和函数组合使用
group by 后查询出来的结果,在需要的条件下可以接having
案例:select dept2 ,max(age) as s from emp group by dept2 having s>5;
having+条件 和where+条件用法一样,但是场景不一样,一般group by 的后面接having
备注:函数求出以后,需要设置成别名,设置别名的字段,进行语句的操作
错误案例:
select name,max(age) from emp 默认
max 最大值 select max(age) from emp
min 最小值 select min(age) from emp
avg 平均值 select min(age) from emp
count 统计总数 select count(age) from emp
sum 求和 select sum(age) from emp
distinct 去重 select distinct(dept2) from emp
===========================================================================
update _set
格式:表名 set 修改字段名=“字段新值” where 条件;
update emp set name=“成权” where sid=1789;
=========================================================================
删:
delete:删除
truncate:快速删除表内数据
drop:删除
删除数据的速度排名:drop>truncate>delete
注:1、drop是删除表和数据
2、truncate 删除无法恢复
3、delete 删除是可以恢复的
delete:
(1)删除表中所有数据
格式:delete from 表名 ;
案例:delete from hz10;
(2)删除表中指定条件数据
格式:delete from 表名 where 条件;
案例:delete from emp where dept2=103;
truncate
(1)快速删除表内数据
格式:truncate 表名
案例:truncate hz10
============================================================================
表取别名:
表名设置别别名
格式
案例:select s.dept2,s.name from emp as s; ()
备份表结构
格式:creae table 新表名 like 备份原表名
案例:create table hz110 like emp
备份数据:
insert into 新表 有表结构 select * from 备份表的原表
insert into 汉字10 select *from emp
备份部分数据
insert into 表名(s字段名1,字段名2) select sid,dept2 from emp;
insert into hz110hz110(sid,dept2) select sid,dept2 from emp;
备份表结构和数据:
create table 表名 as(select * from 备份原表)
create table hzdcs110 as(select * from emp)
select *from hzdcs110;
linux里(xshell)
备份数据库
格式:mysqldump -u root -p 原数据库>数据库脚本后缀
案例:mysqldump -u root -p hz10(数据库)>/home/hz10bf.sql
还原数据库:
1、建立一个新的空库
2、在linux中还原 <
3、mysql -u root -p aa<hzbf.sqlmysql -u root -p 新建的空库<数据库备份好的数据脚本
====================================================
多表:
什么是多表关联查询?
定义:查询数据来源于多张表。
主要讲:
1.内连接(基本内连接和隐藏内连接)
2.左连接(左外连接)
3.右连接(右外连接)
4.全连接(全外连接)
=====================================================
1.讲解过程先建两个表dept 和emp表
dept表:
dept 1 部门编号
dept_name 部门名称
emp表:
sid 员工编号
name 员工姓名
age 员工年龄
woektime_start 入职时间
incoming 薪资
dept2 部门编号
关联关系:dept1=dept2
=============================================
1、笛卡尔积查询(了解)
根据两张表相乘得到的结果:比如:左边有4条数据,右边有6条数据,查询出来就是4*6=24条数据,这种查询数据包含大量的错误结果,通常不会使用这种查询。
格式:SELECT * from 表1,表二;
案例:SELECT * from dept,emp ;
2、内连接(普通内连接,隐藏内连接)
查询两个表共有的关联数据。
2.1普通内连接:
格式:select * from 表1 inner join 表2 on 表1.关联字段1=表2.关联字段2
案例1:select * from dept inner join emp on dept.dept1=emp.dept2 ;案例2:select name,dept_name from dept inner join emp on dept.dept1=emp.dept2 where sid=1789 ;
2.2隐藏内连接
格式:select * from 表1,表2 where 表1.关联字段1=表2.关联字段2
select * from dept,emp where dept.dept1=emp.dept2 ;
3、左连接
以左表为主(显示完整的左表),游标关联的数据就显示,没有的数据就以null显示
格式:select * from 表1 left join 表2 on 表1.关联字段1=表2.关联字段2 ;
案例:select * from dept left join emp on dept.dept1=emp.dept2 ;
4、右连接
右表是以右表数据为主(显示整个右表)左表有关联的数据就显示,没有就以null值显示。
格式:select * from 表1 right join 表2 on 表1.关联字段1=表2.关联字段2 ;
select* from dept right join emp on dept.dept1=emp.dept2 ;
5、左表独有数据
左表中独有的数据显示,(方法,左独有,以右表字段为空查询)
格式:select * from 表1 left join 表2 on 表1.关联字段1=表2.关联字段2 where 右表字段 is null
select * from dept left join emp on dept.dept1=emp.dept2 where name is null;
5、右表独有数据
右表中独有的数据显示,(方法,右独有,以左表字段为空查询)
格式:select * from 表1 right join 表2 on 表1.关联字段1=表2.关联字段2 where 左表字段 is null
案例:select * from dept right join emp on dept.dept1=emp.dept2 where dept1 is null;
6、左表独有数据+右表独有数据:
union 拼接
左独有 union 右独有
select * from dept left join emp on dept.dept1=emp.dept2 where name is nullunionselect * from dept right join emp on dept.dept1=emp.dept2 where dept1 is null;
7、全连接
方法一:左独有+右独有+内连接
select * from dept left join emp on dept.dept1=emp.dept2 where name is nullunionselect * from dept right join emp on dept.dept1=emp.dept2 where dept1 is nullUNIONselect * from dept inner join emp on dept.dept1=emp.dept2 ;
方法二:左连接+右独有
select * from dept left join emp on dept.dept1=emp.dept2 UNIONselect * from dept right join emp on dept.dept1=emp.dept2 where dept1 is null ;
方法三:右连接+左独有
select * from dept right join emp on dept.dept1=emp.dept2 UNION
select * from dept left join emp on dept.dept1=emp.dept2 where name is null ;
总结:
普通内连接:
select * from 表1 inner join 表2 on 表1 的关联字段=表2的关联字段 ;
隐藏内连接:
select * from 表1 , 表2 where 表1 的关联字段=表2的关联字段 ;
左连接
select * from 表1 left join 表2 on 表1 的关联字段=表2的关联字段 ;
右连接:select * from 表1 right join 表2 on 表1 的关联字段=表2的关联字段 ;
左独有数据:
select * from 表1 left join 表2 on 表1 的关联字段=表2的关联字段 where 右表字段为空;
右独有数据:
select * from 表1 right join 表2 on 表1 的关联字段=表2的关联字段 where 左表字段为空;
全外连接:
1、左独有+右独有+内连接
2、左连接+右独有
3、右连接+左独有
</hzbf.sql
|
|