数据库——MySQL(下)

打印 上一主题 下一主题

主题 1835|帖子 1835|积分 5505

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
SQL语句,数据库分为上下两篇文章。
  
   文章目录

  

  • 系列文章目录
  • 前言
  • 一、pandas是什么?
  • 二、使用步调

    • 1.引入库
    • 2.读入数据

  • 总结
  



一、数据库插入语句
        给所有字段插入数据:insert [into] 表名 [(字段名n)] values |value(值n);注意:表后不加字段名时,插入的值次序要与表布局字段次序相同。
        给指定字段插入数据:insert [into] 表名 (字段名n) values |value(值n);
        使用SET方式插入数据:insert [into] 表名 set 字段名n=字段值;
        同时插入多条数据:insert [into] 表名 [(字段名n)] values |value(值n),
                                                                                                        (值n),...
        插入查询结果:insert [into] 表名(字段名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 [as] 别名 ,... from 表名   注意: 假如别名中有空格特殊符号须要引用单引号括起来。
        查询布局排序:

                单个字段中排序:select 查询内容 from 表名 order by 字段 asc|desc   
                多个字段中排序:select 查询内容 from 表名 order by 字段名1 asc|desc , 字段名2 asc|desc...
        条件查询:

                用户按照条件举行查询,查询满足条件的部分数据。Mysql中不区分巨细写,假如须要区分使用binary关键字。
                select 查询内容 from 表 where [binary] 字段名 条件
                条件使用:
                        比较运算符:某字段名(=、>、>=、 <=、 < 、!=)值
                        查询某个区间范围的信息:字段名 [not] between  开始值 and 结束值 。包括边界值
                        查询内容是否在指定集合中:字段名 [not] in(值n)
                        判断某个字段是否为空:is [not] 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 表名 [where 条件] [group by 分组字段n] [order by 字段名 asc|desc] [limit]。        注意:查询字段若没有在多行函数内则必须是分组字段。 假如没有group by 查询字段不能与多行函数一起查询。 where条件中不能使用多行函数。
                having 子句: select 查询内容 from 表名 [group by 分组字段]  [having 条件(可以使用多行函数)] [order by]
六、多表查询 

涉及多张表且有外键的查询就是多表查询。
        交叉连接

                两张或多张表举行笛卡尔积(每一行的数据任意组合的结果)假如列有相同的会主动改为别名。        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 关联条件 [were 筛选条件];        注:inner join关键词中的’inner‘ 可以省略。
        自连接

                连接的两张表是同一张表。 select  查询内容 from talble 别名1 join table 别名2 on 关联条件 [where 筛选条件]
        外连接

                查询出满足条件的数据,还要查询出某张表中不满足连接条件的数据,分为左外连接和右外连接。
                左外连接:将放到left join 左边表中不满足条件的数据也显示出来。(行数据)
                右外连接:将放到right join 右边表中不满足条件的数据也显示出来。(行数据)
                select 查询内容 from table1 left | right [outer] 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。                                                                                                                                                                                                                                           
八、示例

  1. --创建表students(sno主键自增,name非空,sex默认男)
  2. create table students(
  3.     sno int(8) primary key auto_increment,
  4.     name varchar(20) not null,
  5.     sex varchar(1) default '男'
  6. )
  7. --插入
  8. insert into students(sno,name,sex) values(1,'张三','男');
  9. insert into students value(2,'里斯','女');
  10. --指定插入 sno,name='王五'
  11. insert into students(sno,name) values(3,'王五');
  12. --set插入
  13. insert into students set sno=4,name='小刘'
  14. select * from students
  15. --同时插入多条数据
  16.     --插入所有字段
  17. insert into students(sno,name,sex)
  18.                 values(5,'王一','男'),
  19.                       (6,'张扬','女')
  20.     --插入指定字段
  21. insert into students(son,name) values(7,'李湘'),(8,'李一')
  22. --将查询结果插入,假设t_student表和students表结构一样并创建了
  23. insert into t_student select * form students;
  24. --更新指定数据  王一改为王一一
  25. update students set name='王一一' where name='王一'
  26. --更新某一列全部数据 sex改为女
  27. update students set sex='女'
  28. --删除所有
  29. delete from students where son>6
  30. delete from students
  31. --模糊查询 名字包含“王”的人,
  32. select name from students where name like '%王%'
  33. --分页查询  从表格第一条数据开始查询,显示3条数据
  34. select * from studen where limit(1,3)
  35. --流程控制函数  给stuents表中加入分数score属性,然后使用流程控制函数
  36. alter table students add score float(22);
  37. --查询学生的成绩>=60及格,<60不及格
  38. select sore,if(score>=60,'合格','不合格')  '成绩水平' form students;
  39. --假设有两次考试,第二次有的学生没有成绩,将成绩加一起,
  40. selece (score+ifnull(score_2,0)) from stuents
  41. --nullif()函数
  42. select nullif(1,2),nullif(1,1)   -- 1, null
  43. --case函数
  44. select case 1                          -- 结果1
  45.         when 1 then '结果1'
  46.         when 2 then '结果2'
  47.         else '其他结果'
  48.         end
  49. -- 查询成绩,>=90返回 “优秀”,>=60"良好",否则不及格
  50. select score,case
  51.             when score>=90 then '优秀'
  52.             when score>=60 then '良好'
  53.             else '不及格'
  54.             end '成绩水平'
  55. from students;
复制代码

  1. --多表查询-- 创建数据test1;创建部门表dept,员工表emp; 插入数据
  2. create database test1;
  3. create table dept(
  4.         deptno int(4) primary key;
  5.         dname varchar(20),
  6.         city varchar(20),
  7. );
  8. insert into dept vales
  9.         (10,'JAVA','上海'),
  10.         (20,'PYTHON','武汉'),
  11.         (30,'前端','杭州'),
  12.         (40,'开发','深圳');
  13. create table emp(
  14.         empno int(4) primary key,
  15.         ename varchar(10),
  16.         jbo varchar(10),
  17.         sal decimal(7,2),
  18.         deptno int(4),
  19.         constraint fk_emp_deptno foreign key(deptno) refernces dept(deptno)
  20. )
  21. insert into emp values
  22.         (1,'张一','JAVA',11000,10),
  23.         (2,'张三','PYTHON',13000,20),
  24.         (3,'李斯','开发',11000,40),
  25.         (4,'李湘','JAVA',15000,10),
  26.         (5,'王五','前端',11000,30),
  27.         (6,'王丽璐','JAVA',11000,10),
  28.         (7,'张国','前端',11000,30),
  29.         (8,'李利','开发',11000,40),
  30.         (9,'刘三','JAVA',11000,10),
  31.         (10,'刘伟','PYTHON',14000,20);
  32. --查看表中数据,统计数据
  33. select * from emp;
  34. select count(*) from emp;
  35. --交叉连接
  36. select * from emp cross join dept;
  37. --自然连接
  38. selct * from emp natural join dept;
  39. --内连接 查询部门号=10的员工信息,城市
  40. select e.*,d.city from emp e inner join dept d on e.deptno=d.deptno where e.deptno=10
  41. --自连接
  42. select e.empno,e.ename,a.jbo,a.sal from emp e join emp a on e.empno=a.empno
  43. --外连接 左连接
  44. select * from dept d left join emp e on e.deptno = d.deptno
复制代码





免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

欢乐狗

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表