sql


1、表记录的管理
 1、删除表记录
  1、delete from 表名 where 条件;
   ##不加where条件全部删除
 2、修改表记录
  1、update 表名 set 字段名=值,... where 条件;
   ##不加where条件全部修改
2、运算符
 1、数值比较&字符比较
  1、数值比较运算符:> >= < <= != =
  2、字符比较:= !=
 2、逻辑比较
  and 、or
 3、范围内比较(between and、in、not in)
  字段名 between 值1 and 值2
  字段名 in(值1,值2,...)
  字段名 not in(值1,值2,...)
 4、空、非空(is null、is not null)
  1、注意
   1、null :空值,必须用is 或 is not去匹配
   2、""   :空字符串,用 = 或 != 去匹配
 5、模糊比较(like)
  1、字段名 like 表达式
  2、表达式
   _ : 匹配单个字符
   % : 匹配0到多个字符
3、SQL查询
 1、order by(排序)
  1、order by 字段名 ASC/DESC;
 2、limit(永远放在SQL语句的最后)
  1、limit n -->显示n条记录
  2、limit m,n -->从 m+1 条记录开始,显示 n 条
 3、聚合函数
  avg(字段名)、sum(字段名)、max(字段名)、
  min(字段名)
  count(字段名) ## 空值NULL不会被统计
 4、group by(给查询结果分组)
  1、注意
   1、group by之后字段名 必须为select 后的字段名
   2、如果select后的字段名没有在group by之后,则必须要对该字段进行聚合处理
 5、having(对查询结果进行进一步筛选)
  1、注意
   1、having与group by联合使用,用来过滤由group by返回的结果集
   2、弥补了where关键字不能与聚合函数联合使用的不足
   3、where只能操作表中实际存在的字段,having可以操作聚合函数生成的显示列
 6、distinct(不显示字段的重复值)
  1、注意
   1、distinct和from之间所有的字段必须全部相同才可以去重
   2、distinct不能对任何字段做聚合处理
 7、查询表记录时做数学运算
  + - * / %
 8、总结
  3、 select ... 聚合函数 from ...
  1、 where ...
  2、 group by ...
  4、 having ...
  5、 order by ...
  6、 limit ...
 4、约束
  1、默认约束(default)
  2、非空约束(not null)
 5、索引
  1、BTree
  2、优点:加快数据的检索速度
  3、缺点
   1、索引需要动态维护,降低数据的维护速度
   2、索引占用物理空间
  4、索引类型
   1、普通索引(MUL)
    1、创建
     1、创建表时创建: index(字段名),...
     2、在已有表创建:
      create index 索引名 on 表名;
    2、查看
     1、desc 表名;
     2、show index from 表名G;
    3、删除(只能一个一个删除)
     drop index 索引名 on 表名;
   2、唯一所以(UNI,字段值不允许重复,但可为NULL)
    1、创建
     1、创建表
      unique(字段名),...
     2、在已有表中创建
      create unique index 索引名 on 表名;
    2、删除
     drop index 索引名 on 表名;
MySQL-Day03笔记
1、索引
 1、普通索引(MUL)
 2、唯一索引(UNI)
 3、主键索引(PRI)
  1、使用规则
   1、一个表中只能有一个主键(primary)字段
   2、对应字段的值不允许重复,且不能为空
   3、主键字段的key标志PRI
   4、把表中能够唯一标识一条记录的字段设置为主键,通常把表中记录编号的字段设置为主键
  2、创建主键(primary key)
   1、创建表时创建
    1、字段名 数据类型 primary key,
    2、primary key(字段名)
   2、在已有表中创建
    alter table 表名 add primary key(字段名);
  3、删除
   alter table 表名 drop primary key;
  4、自增长属性(auto_increment)
   1、作用:通常和主键字段一起配合使用
   2、创建
    1、创建表时创建
    字段名 数据类型 primary key auto_increment
    2、在已有表中添加自增长属性(modify)
     alter table 表名 modify 字段名 数据类型 primary key auto_increment
  5、删除主键及自增长属性
   1、alter table 表名 modify 字段名 数据类型;
   2、alter table 表名 drop primay key;
 4、外键索引(foreign key)
  1、定义
   让当前表的字段值在另一个表的范围内选择
  2、语法格式
   foreign key(参考字段名)
   references 被参考表名(被参考字段名)
   on delete 级联动作
   on update 级联动作
  3、案例
   表1:缴费信息表(财务)
    学号  姓名     班级     缴费金额
     1   唐伯虎  AID1712     28000
     2   点秋香  AID1712     20000
   表2:学生信息表(班主任)
    学号  姓名    缴费金额
     1   唐伯虎    28000
  4、删除外键
   1、语法格式
    alter table 表名 drop foreign key 外键名;
   2、注意
    1、外键名的查看方式
     show create table 表名;
  5、在已有表中添加外键
   1、语法格式
    alter table 表名 add
    foreign key(参考字段名) references
    被参考表名(被参考字段名)
    on delete 级联动作
    on update 级联动作
   2、注意
    在已有表中添加外键时,会受到表中原有数据的限制
  6、级联动作
   1、cascade :数据级联更新
    1、当主表删除记录时,如果从表有相关联记录则级联删除
    2、当主表更新被参考字段的值时,从表级联更新参考字段的值
   2、restrict(默认)
    1、当主表删除记录时,如果从表中有相关联记录则不允许主表删除
    2、update同 1
   3、set null
    1、当主表删除记录时,从表中相关联记录外键字段值变为null
    2、update 同 1
   4、no action
    同 restrict,都是立即检查外键限制
  7、使用规则
   1、两张表被参考字段和参考字段的数据类型要一致
   2、被参考字段必须是KEY的一种,通常是primary key
2、数据导入
 1、作用:将文件系统的内容导入到数据库中
 2、语法格式
  load data infile "文件名"
  into table 表名
  fields terminated by "分隔符"
  lines terminated by "分隔符"

  tarena:x:1000:1000:tarena,,,:/home/tarena:/bin/bash
  用户名:密码:UID:GID:描述:家目录:登录权限
 3、把/etc/passwd 导入到mysql数据库中
 4、操作步骤
  1、在数据库中创建对应的表
  2、查看数据库的默认搜索路径
   show variables like "secure_file_priv";
  3、将系统文件拷贝到数据库的默认搜索路径中
   sudo cp /etc/passwd /var/lib/mysql-files
   sudo -i
   cd /var/lib/mysql-files
   ls
   exit
3、数据导出
 1、作用
  将数据库中表的记录保存到系统文件里
 2、语法格式
  select ... from 表名
  into outfile "文件名"
  fields terminated by "分隔符"
  lines terminated by "分隔符"
 3、练习
  1、把userinfo表中的用户名、密码和uid号三个字段导出到userinfo.txt中
  2、将库名:mysql库中user表中的User、Host两个字段的值导出到 user2.txt
 4、注意
  1、导出的内容由SQL查询语句决定
  2、执行导出命令时路径必须指定在对应的数据库目录下
  3、show variables like "secure_file_priv";
    show variables like "%secure%";
4、表的复制
 1、表的复制
  1、语法格式
   create table 表名 select 查询命令;
  2、练习
   1、复制userinfo表的前10行,userinfo3 c
   2、复制userinfo表的用户名、密码、uid三个字 段的2-10条记录,userinfo4
 2、只复制表结构
  1、语法格式
   create table 表名 select ... where false;
 3、注意
  1、复制表的时候不会把原有表的 键 属性复制过来
5、嵌套查询
 1、定义
  把内层的查询结果作为外层查询的条件
 2、语法格式
  select查询语句 where 条件(select查询语句);
 3、练习
  1、把uid的值小于这个字段的平均值的用户名和uid显示出来
  2、查找userinfo表中用户名在 mysql库下的user表Host值为localhost并且User值是root 的用户名
6、多表查询
 1、两种方式
  1、select 字段名列表 from 表名列表; #笛卡尔积
   select * from tt1,tt2;
  2、select 字段名列表 from 表名列表 where 条件;
 2、练习
  1、显示省和市的信息
  2、显示省、市、县的信息
7、连接查询
 1、内连接
  1、定义
   从表中删除与其他被连接表中没有匹配到的行
  2、语法格式
   select 字段名列表 from 表1
   inner join 表2 on 条件;
  3、练习
   1、显示省市信息,没有匹配的不显示
   2、显示省市县的信息 
 2、外连接
  1、左连接
   1、定义
    以左表为主显示查询结果
   2、语法
    slect 字段名列表 from 表1 left join 表2 on 条件;
   3、练习
    1、显示省市的信息,以左表为准
    2、显示省市的信息,以右表为准
    3、显示省市区的信息,要求市全部显示
  2、右连接

   

   
      
  

原文地址:https://www.cnblogs.com/Han-org/p/8871429.html