数据库——MySQL(下)
SQL语句,数据库分为上下两篇文章。文章目录
[*]系列文章目录
[*]前言
[*]一、pandas是什么?
[*]二、使用步调
[*]1.引入库
[*]2.读入数据
[*]总结
一、数据库插入语句
给所有字段插入数据:insert 表名 [(字段名n)] values |value(值n);注意:表后不加字段名时,插入的值次序要与表布局字段次序相同。
给指定字段插入数据:insert 表名 (字段名n) values |value(值n);
使用SET方式插入数据:insert 表名 set 字段名n=字段值;
同时插入多条数据:insert 表名 [(字段名n)] values |value(值n),
(值n),...
插入查询结果:insert 表名(字段名n) select 字段名n from 表名 where 条件 注意:插入表的字段和查询的字段个数和范例要保持一致。
多个字段名之间用“,”连接。
二、更新数据
更新指定命据:update 表名 set 字段名n=值n where 条件
更新某一个 特性/列 的所有数据:update 表名 set 字段名n=值n
三、删除数据
删除指定命据:delete from 表名 where 条件
删除全部数据:delete from 表名
truncate关键字删除数据:truncate 表名
delete与truncate区别:
delete时数据利用语言DML ,truncate是数据界说语言DDL。
delete删除数据是一条一条删除,truncate直接删除数据保留表布局,删除后相当于得到一个新表。 truncate效率更高。
delete删除数据会显示删除行数,truncate不会。
delete操作可以举行回滚,truncate操作是隐士提交,不可以回滚。
四、查询操作
查询所有字段:select 字段名n from 表名
使用通配符查询所有字段:select * from 表名
查询指定字段:select 字段名n from 表名
去重 distinct 使用:select distinct 字段名n from 表名 注意:对多个字段去重是所选字段属性都一样时才去重,其中一个不同就保留下来。
查询中使用算数运算符:select 字段名-运算符-值 from 表名。【+ / - / */ (div) / %(mod)】
给字段起别名:select 字段名n 别名 ,... from 表名 注意: 假如别名中有空格特殊符号须要引用单引号括起来。
查询布局排序:
单个字段中排序:select 查询内容 from 表名 order by 字段 asc|desc
多个字段中排序:select 查询内容 from 表名 order by 字段名1 asc|desc , 字段名2 asc|desc...
条件查询:
用户按照条件举行查询,查询满足条件的部分数据。Mysql中不区分巨细写,假如须要区分使用binary关键字。
select 查询内容 from 表 where 字段名 条件
条件使用:
比较运算符:某字段名(=、>、>=、 <=、 < 、!=)值
查询某个区间范围的信息:字段名 between 开始值 and 结束值 。包括边界值
查询内容是否在指定集合中:字段名 in(值n)
判断某个字段是否为空:is null
模糊查询:select 查询内容 from 表名 where 字段名 like ’%某字符结尾‘;【%】任意长度的字符(0+)【_】匹配一个字符。
条件中的逻辑运算:
and:在查询的时候只有满足所有条件才会查询出来。select 查询内容 from 表名 where 条件1 and 条件n;
or:在查询的时候满足一个条件就可以查出来。select 查询内容 form 表名 where 条件1 or 条件n;
分页查询
select 查询内容 from 表名 where 条件 order by 字段名 asc|desc limit a,b; a从哪条记载开始,b每页显示的条件。注意:limit 从那个条记载开始,每页显示的条数且默认第一条值0;假如limit 与 order by连用时,先排序在分页。
五、函数的使用
单行函数
字符函数
拼接字符串concat():select concat("名字",name,"性别",sex...) from 表名
盘算字符串的长度length(): select * from 表名 where length(name)=5;
转化巨细写lower() upper()转换巨细写:select 字段名 upper(字段名),lower(字段名) from 表名;
指定字符串中将某个字串替换为新字符串replace():select replace(目标字符串,查找的子串,新字符串) from 表名;
截取子串substring(): select substring(字段名,开始位置,长度) from 表名;注意:开始位置从1开始,不从0开始。
数值函数
abs()取绝对值:select abs(-1),abs(1) -- 1,1
pi()获取圆周率:select pi() -- 3.141593
mod()取模:select mod(3,2) -- 1
pow()一个数的n次方:select pow(3,2) -- 9
ceil() /floor()向 上 /下 取整:select ceil(5.3),floor(5.7) -- 5, 6
round(num)返回四舍五入的整数/ round(num,n)返回四舍五入n位小数:selcect round(4.3),round(3.43,1) -- 4, 3.4
rand()获取浮点范例的随机数,范围[0-1)。
truncate(num,n)截取数值部分,不举行四舍五入:select truncate(4.54,0),truncate(4.543,2) -- 4, 4.54
TRUNCATE TABLE —— 截断表中的数据,相当于批量删除所有行。
TRUNCATE(num, n) —— 截断数值的小数部分,不举行四舍五入。
日期时间函数
now() 获取SQL实行的日期和时间
curdate()获取当前日期,年代日
curtime()获取当前时间,分秒时
sysdate()获取函数实行时的日期和时间
dayofyear()获取某个日期是所在年份的第几天
week()获取某个日期是所在年份的第几周
datediff(a,b)盘算a,b两个日期之间的时间隔断
data_add() data_sub()实现日期的加减运算:data_add(日期,时间隔断范例关键字interval 时间隔断范例对应的表达式 时间隔断范例) 比方 day_hour 1_12 1天12小时;year_month 2_1 2年1个月 select data_add(now(),interval 10 day) 在当前时间上增加10天。
流程控制函数
if(条件,t,f)假如条件建立返回t,否则返回f。
ifnull(值1,值2)假如值1不为空则返回值1,否则返回值2。
nullif(值1,值2)假如值1即是值2返回nulll,否则返回值1。
case 值
when 值1 then 结果1
when 值2 then 结果2 ...
else 其他结果
end。
case
when 条件 then 结果1
when 条件 then 结果2
else 其他结果
end
from 表名。
多行函数
操作一组数据(多行记载)返回一个结果 也叫分组函数。多行函数大多使用于统计。
coun()统计表中记载的数目:select count(*) from 表名;统计表中一共多少条数据。
select 字段名 count(exp from 表名;统计表中某值中有存在多少条记载(非空数值)。
select count(distinct(exp)) from 表名;统计表达式exp的值不重复且非空的数据。
sum()某个字段值的总和:select sum(字段名) from 表名;返回字段值的总和。
select sum(distinct(字段名)) from 表名;返回不重复的字段值的总和。
avg()匀称值:select avg(字段名) from 表名;返回字段值的匀称值。
select avg(distinct(字段名)) from 表名;返回不重复的字段值的匀称值。
max() /min()最大/小值:select max(字段名),max(字段名) from 表名;返回字段值的最大、小值。
分组统计
select 查询内容 from 表名 。 注意:查询字段若没有在多行函数内则必须是分组字段。 假如没有group by 查询字段不能与多行函数一起查询。 where条件中不能使用多行函数。
having 子句: select 查询内容 from 表名
六、多表查询
涉及多张表且有外键的查询就是多表查询。
交叉连接
两张或多张表举行笛卡尔积(每一行的数据任意组合的结果)假如列有相同的会主动改为别名。 select 查询内容 from table1 cross join table2; 总记载条数(行):table1条数 * table2条数 ,总列数:table1列数 + table2列数
自然连接
关系表中相同名称的字段举行主动匹配产生的结果,去重复列。≈交集(行数据)。 select 查询内容 from table1 natural join table2; 注:关联的表中必须有相同字段名(字段名相同,字段数据范例相同);查询出来的结果会去重。
内连接
两张或多张表中按指给定的连接条件查询出满足条件的结果。select 查询内容 from table1 别名1 inner join table2 别名2 on 关联条件 ; 注:inner join关键词中的’inner‘ 可以省略。
自连接
连接的两张表是同一张表。 select 查询内容 from talble 别名1 join table 别名2 on 关联条件
外连接
查询出满足条件的数据,还要查询出某张表中不满足连接条件的数据,分为左外连接和右外连接。
左外连接:将放到left join 左边表中不满足条件的数据也显示出来。(行数据)
右外连接:将放到right join 右边表中不满足条件的数据也显示出来。(行数据)
select 查询内容 from table1 left | right join table2 on 连接条件。
七、子查询
1、作为条件在一个查询语句中包含了另一个查询语句。select 查询内容 from 表 where 字段 操作关键词 (子查询语句)。
标量子查询
返回一个单一的值(子查询返回一个值)。
行子查询
返回结果为一行N列,必须使用 =、<>、IN、EXISTS 或者 JOIN 举行匹配。
列子查询
返回的结果是多条数据,操作符:in、any=some返回结果中任何一个数据、all返回结果中的所有数据、exists返回布尔范例,满足子查询条件返回True。
2、作为表 select 查询内容 from (子查询语句)表别名 where 条件。
查询最高的匀称薪资:select max(sal) from (select avg(sal) avgsal from emp group by deptno) avg_sal。
八、示例
--创建表students(sno主键自增,name非空,sex默认男)
create table students(
sno int(8) primary key auto_increment,
name varchar(20) not null,
sex varchar(1) default '男'
)
--插入
insert into students(sno,name,sex) values(1,'张三','男');
insert into students value(2,'里斯','女');
--指定插入 sno,name='王五'
insert into students(sno,name) values(3,'王五');
--set插入
insert into students set sno=4,name='小刘'
select * from students
--同时插入多条数据
--插入所有字段
insert into students(sno,name,sex)
values(5,'王一','男'),
(6,'张扬','女')
--插入指定字段
insert into students(son,name) values(7,'李湘'),(8,'李一')
--将查询结果插入,假设t_student表和students表结构一样并创建了
insert into t_student select * form students;
--更新指定数据王一改为王一一
update students set name='王一一' where name='王一'
--更新某一列全部数据 sex改为女
update students set sex='女'
--删除所有
delete from students where son>6
delete from students
--模糊查询 名字包含“王”的人,
select name from students where name like '%王%'
--分页查询从表格第一条数据开始查询,显示3条数据
select * from studen where limit(1,3)
--流程控制函数给stuents表中加入分数score属性,然后使用流程控制函数
alter table students add score float(22);
--查询学生的成绩>=60及格,<60不及格
select sore,if(score>=60,'合格','不合格')'成绩水平' form students;
--假设有两次考试,第二次有的学生没有成绩,将成绩加一起,
selece (score+ifnull(score_2,0)) from stuents
--nullif()函数
select nullif(1,2),nullif(1,1) -- 1, null
--case函数
select case 1 -- 结果1
when 1 then '结果1'
when 2 then '结果2'
else '其他结果'
end
-- 查询成绩,>=90返回 “优秀”,>=60"良好",否则不及格
select score,case
when score>=90 then '优秀'
when score>=60 then '良好'
else '不及格'
end '成绩水平'
from students;
--多表查询-- 创建数据test1;创建部门表dept,员工表emp; 插入数据
create database test1;
create table dept(
deptno int(4) primary key;
dname varchar(20),
city varchar(20),
);
insert into dept vales
(10,'JAVA','上海'),
(20,'PYTHON','武汉'),
(30,'前端','杭州'),
(40,'开发','深圳');
create table emp(
empno int(4) primary key,
ename varchar(10),
jbo varchar(10),
sal decimal(7,2),
deptno int(4),
constraint fk_emp_deptno foreign key(deptno) refernces dept(deptno)
)
insert into emp values
(1,'张一','JAVA',11000,10),
(2,'张三','PYTHON',13000,20),
(3,'李斯','开发',11000,40),
(4,'李湘','JAVA',15000,10),
(5,'王五','前端',11000,30),
(6,'王丽璐','JAVA',11000,10),
(7,'张国','前端',11000,30),
(8,'李利','开发',11000,40),
(9,'刘三','JAVA',11000,10),
(10,'刘伟','PYTHON',14000,20);
--查看表中数据,统计数据
select * from emp;
select count(*) from emp;
--交叉连接
select * from emp cross join dept;
--自然连接
selct * from emp natural join dept;
--内连接 查询部门号=10的员工信息,城市
select e.*,d.city from emp e inner join dept d on e.deptno=d.deptno where e.deptno=10
--自连接
select e.empno,e.ename,a.jbo,a.sal from emp e join emp a on e.empno=a.empno
--外连接 左连接
select * from dept d left join emp e on e.deptno = d.deptno
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]