zoukankan      html  css  js  c++  java
  • day037 mysql操作库,表,行

    1.库操作

    2.表操作

    3.行操作

    1.库操作

    1)创建数据库

    语法:

    create database 数据库名 charset utf8;

    数据库命名规则:

      由数字,字母,下划线,@,#,$ 等组成
    
      区分大小写
    
      唯一性  
    
      不能使用关键字如 create select
    
      不能单独使用数字
    
      最长128位
    
      #基本上跟python或者js命名规则一样

    2)相关操作:

    查看数据库:

      show databases; 查看所有的数据库
    
      show create database db1; 查看db1这个数据库
         select database(); 查看当前所使用的数据库
      
      select user(); 查看当前所使用的用户

    选择数据库:

    use 数据库名;

    删除数据库:

    drop database 数据库名;

    修改数据库:

    alter database db1 charset utf8; 

    2.表操作

    表相当于文件,表中的一条记录就相当于文件的一行内容,表中的一条记录有对应的标题,成为表的字段

    1).创建表

    语法:

      create table 表名(
    
        字段名 类型(宽度) 约束条件,
    
        字段名 类型(宽度) 约束条件,
    
        字段名 类型(宽度) 约束条件);

    注意:

    1.在同一张表中,字段名是不能重复的

    2.宽度和约束条件可选,非必须,宽度指的是字段长度约束,例如: char(10) 里面的10

    3.字段名和类型是必须要写的

    2).查看表的结构

      ①desc 表名;
    
      ②show create table t1G;

    修改表操作:

    1.修改表名 
        alter table 表名 rename 新表名;
    2.增加字段
        alter table 表名 add 字段名 数据类型 [完整性约束条件],  #注意这里可以通过逗号分割
                        add 字段名 数据类型 [完整性约束条件];  #这里可以一次添加多个约束
    
        alter table 表名 add 字段名 数据类型 [完整性约束条件] first(after);添加字段时,放在第一个字段位置(或者放在最后一个位置),通过first和after可以将新添加的字段放在表的任意位置
    3.删除字段
        alter table 表名 drop 字段名;
    4.修改字段
        alter table 表名 modify 字段名 数据类型 [完整性约束条件];
        alter table 表名 change 旧字段名 新字段名 旧数据类型 [完整性约束条件];
        #change比modify多了一个改名字的功能,这一句是只改了一个字段名字,如果想改数据类型,在新字段名后面加上新数据类型即可

    给字段添加一个外键属性的语句: alter table 表二名 add foreign key (表2的一个字段) references 表1名(表一的一个字段);

    注: mysql中表名是不区分大小写的,如果将表名t1改为T1,是没用的,在数据库猴子那个表名都是小写的.

    行操作

    1) 插入数据

      语法1:
    
      insert into 表名(字段1,字段2,字段3....) values(值1,值2,值3...); #指定字段来插入数据,插入的值要和你前面的字段相匹配
    
      语法2:
    
      insert into 表名 values (值1,值2...) # 如果不指定字段,就按照默认的几个字段来插入数据

    2) 更新(修改)数据

      语法:
    
      update 表名 set 字段1=值1,字段2=值2 where ...; #定位到where 然后将字段1和字段2的值改为值1,值2   定位到某个记录,并把这个记录中的某项内容更改

    3)删除数据

      语法:
    
      delete from 表名 where conition; #删除符合条件的记录
    
      delete from 表名;

    # 如果不加where条件,则默认将表中的所有内容删除,但是清空所有的内容,一般我们用truncate,能够将id设置为0,delete不能讲id设置为0,在插入数据时,会按照之前的数据记录的id数继续递增

    4).查询数据(重点)

    单表查询和多表查询

    1)单表查询

    语法:
    
      select * from 表名; #*代表的是查询所有字段的数据
    
      select distinct 字段1,字段2...from 库名.表名
    
            where 条件
    
            group by field(字段) # 分组
    
            having       #筛选
    
            order by field(字段)   #将结果按照后面的字段进行排序
    
            limit 限制条数    #将最后的结果加一个限制条数,就是说要过滤出来的数据记录的条数

    2)关键字的执行优先级(重点中的重点)

    from --> where -->group by -->having-->select-->distinct-->order by-->limit

    步骤:

    1.先到找表from 

    2.拿着where 指定的约束条件,去文件/表 中取出数据

    3.将取出的数据group by分组,如果没有group by,则整体为一组

    4.将分组后的结果进行having过滤

    5.然后执行select查询

    6.去重复

    7.将结果按照条件order by进行排序

    8.限制结果的显示条数

    聚合函数: 聚合函数聚合的是组的内容,若是没有分组,则默认一组

    如: select count(*) from 表名;
    
    select max/min/avg/sum(字段) from 表名; 计算字段中的xxx值

    having过滤 

    having的语法格式和where是一模一样的,只不过having是在分组之后进行的进一步的过滤,where不能使用聚合函数,having是可以使用聚合函数的
    #!!!执行优先级从高到低:where > group by > having 
    #1. Where 发生在分组group by之前,因而Where中可以有任意字段,但是绝对不能使用聚合函数。
    
    #2. Having发生在分组group by之后,因而Having中可以使用分组的字段,无法直接取到其他字段,having是可以使用聚合函数
    

    order by 查询顺序

    select * from 表名 order by 字段;  默认升序, ASC升序, DESC降序

    限制查询的记录数 limit 

    # 取出工资最高的前三位的信息

    select * from 表名 order by salary DESC limit 3;

    使用正则表达式查询

    #之前我们用like做模糊匹配,只有%和_,局限性比较强,所以我们说一个正则,之前我们是不是学过正则匹配,你之前学的正则表达式都可以用,正则是通用的
    SELECT * FROM employee WHERE name REGEXP '^ale';
    
    SELECT * FROM employee WHERE name REGEXP 'on$';
    
    SELECT * FROM employee WHERE name REGEXP 'm{2}';
    
    
    小结:对字符串匹配的方式
    WHERE name = 'egon';
    WHERE name LIKE 'yua%';
    WHERE name REGEXP 'on$';

    2) 多表查询

    外链接语法:

      select 字段列表 from 表1 inner / left / right join 表2 on 表1.字段=表2.字段 ;

    1.交叉连接: 不适用任何匹配条件 ,生成笛卡尔积

    select * from 表1,表2 ;

    如果这样写代码,会生成笛卡尔积

    笛卡尔积: 每一个字段的每一项与另外一个字段的每一项 匹配

    2.内连接 :只连接匹配的行

    select * from 表1,表2 where 表1.字段=表2.字段 ;

    3.外连接之左/右连接: 优先显示左表全部记录

    select * from 表 left/right join 你想优先显示的表 on ....; # on的作用和where差不多

    全外连接: 显示左右两个表的全部记录

    (mysql 不支持全外连接)

    (mysql 可以使用此种方式间接实现全外连接)

    select * from 表 left join 优先显示的表 on ....union select * from 表 right join 优先显示的表 on .... ;
    
    #注意 union与union all的区别:union会去掉相同的纪录,因为union all是left join 和right join合并,所以有重复的记录,通过union就将重复的记录去重了

    子查询

    子查询其实就是将你的一个查询结果用括号括起来,这个结果也是一张表,就可以将它交给另外一个sql语句,作为它的一个查询依据来进行操作。

    带in关键字的子查询

    select id,name from dep where id in (select dep_id from emp group by dep_id having avg(age)>25);
    
    总结: 子查询的思路和解决问题一样,先解决一个然后拿着这个的结果再去解决另外一个问题,连表的思路都是先将2个表关联在一起,然后进行group by 啊过滤啊操作,两者的思路是不一样的

    带比较运算符的子查询

    比较运算符: = ,> ,< ,>=,<=,!=等

    带exists关键字的子查询

    exists关字键字表示存在。在使用exists关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。True或False
        当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询。还可以写not exists,和exists的效果就是反的

  • 相关阅读:
    跨域请求携带cookie
    vue单文件组件实例1:简单单文件组件
    vue单文件组件实例2:简单单文件组件
    vue路由1:基本使用
    项目中常用的javascript/jquery操作
    vue计算属性和侦听器
    专题8:javascript中事件
    普通文件的上传(表单上传和ajax文件异步上传)
    python导入包出错:ImportError: No module named XXXXX

  • 原文地址:https://www.cnblogs.com/zty1304368100/p/10295950.html
Copyright © 2011-2022 走看看