MySQL (1)

一,SQL语句基础

  1. 语法要求
    • 所有内容都需要使用英文符号
    • 每一个语句必须使用;结尾
  • SQL (structured query language)
  • SQL 是操作和检索关系型数据库的标准语言(CURD)
  • SQL分类

    • DDL ,Data Definition Language,数据定义语言 定义结构

      关键字: create drop alter
      
    • DML ,Data Manipulation Language,数据操作语言

      关键字:insert update delete
      
    • DQL ,Data queries Language,数据查询语言,查询(检索)

      关键字:select
      
    • DTL ,Data Trasaction Language ,事务处理语言

      关键字: transaction commit rollback
      
    • DCL ,Data Control Language,数据控制语言,权限

      关键字: 授权grant ,回收revoke
      

二, DDL 数据定义语言

  1. 数据库

    创建: create database [IF NOT EXISTS] 数据库名称 [Character set 字符集名称];
    删除: drop database 数据库名称;
    修改: alert database 数据库名称 character set 字符集名称;
    
    • 创建: create table 表名称(字段描述1,字段描述2,…);

      字段描述: 字段名称 字段类型
          字段名称: 自定义
          字段类型:
              (1)字符串string:
                 char(n) :固定字符串
                 varchar(n): 可变字符串【】
              (2)数字Number
                 mysql类型       Java中类型
                  bit            boolean
                  tinyint        byte
                  smallint       short
                  int            int【】
                  bigint              long
                  double(m,d)     double
                  decimal         number
              (3)日期时间
                  date  
                  time
                  datetime
                  timestamp
               (4)大数据
                 字节:  blob     64k
                        longblog 4g    
                 字符:
                             text     64k
                             longtext 4g
           例如: create table user(
              int varchar(32), 
              name varchar(50),
              age int
              );
      
    • 删除:

      drop table [IF EXISTS] 表名;
      
    • 修改:

      alter table 表名 rename to 新表名;
      
  2. 字段

    • 添加字段

      alter table 表名 add column 字段描述; 
      例如: alter table users add column name int;
      
    • 删除字段:

      alter table 表名 drop [column] 字段名称;
      
    • 修改字段:

      alter table 表名 change [column] old字段名称 new字段描述;
      

三,DML-数据操纵语言(数据)

3.1 插入数据 insert
  1. 格式

    格式1: insert into 表名 values(值1,值2,...);
    格式2: insert into 表明(字段名称1,字段名称2,...) values(值1,值2,...);
    
3.2更新数据
  1. update 表名 set 字段1=值,字段2=值…;

    例如: update users set age=35;
    
  2. update 表名 set 字段1=值,字段2=值… where条件

    条件的格式: 字段 运算符 值     例如:id='u01'
    例如:update users set age=35 where id=2;
    
3.3 删除数据
  1. delete from 表名 where 条件;

    例如: delete from users where id>1;
    

四,DQL – Data queries Language,数据查询语言,查询(检索)

4.1 没有条件查询
  1. 查询所有

    select * from users;
    
  2. 查询部分信息

    select id,firstname,secondname from users;
    
  3. 查询用户编号、姓名,及格(与60分差)

    select id,firstname,secondname, count-60 from users;
    select id,concat(firstname,secondname), count-60 from users;
    
  4. 修改上面查询显示字段名称,用”姓名”表示姓名,用”及格”表示及格

    select id,concat(firstname,secondname) as 姓名, count-60 及格 from users;
    select id,concat(firstname,secondname) as `姓 名`, count-60 及格 from users;
    字段别名: 字段名称 [AS] 别名
    
4.2 有条件查询
  1. 查询分数等于60的学生

    select * from users where count=60;
    
  2. 查询姓”张”学生

    select * from users where firstname='张';
    
  3. 查询年龄大于18的学生

    select * from users where age > 18;
    
  4. 显示分数在60-80的学生

    select * from users where count >=60 and count <= 80;
    select * from users where count between 60 and 80;
    
  5. 查询编号为u001和u002的学生

    select * from users where id='u001' or id='u002';
    select * from users where id in ('u001','u002');
    
  6. 查询年龄是18或20的学生

    select * from users where age = 18 or age = 20;
    
  7. 查询名中含有”云”的学生

    select * from users where secondname like '云';
    #相当于=
    select * from users where secondname like '%云%';
    模糊查询(不完全匹配查询)格式:字段 like 值
            %,匹配多个值
                '%云' ,以”云“结尾
                '云%' ,以”云“开头
                '%云%',包含”云“
            _ 匹配一个字符
    
  8. 查询名中第二字还有”云”的学生

    select * from users where secondname like '_云%';
    
  9. 查询分数小于60 或 大于90分的学生

    select * from users where count < 60 or count > 90;
    
  10. 查询分数等于60 或者 分数大于90并且年龄大于23

    select * from users where count=60 or count > 90 and age > 23 ;
    select * from users where count=60 or (count > 90 and age > 23) ;
        * 注意:and 优先级高于 or
    
  11. 查询没有考试的学生

    select * from users where count is null ;
    
  12. 查询所有考试的学生

    select * from users where count is not null ;
    
  13. 如果数据包含%,查询所有数据中含有%

    insert into users(`id`,`firstname`,`age`,`secondname`,`count`) values ('u009','小%乔',12,'推',100);
    select * from users where firstname like '%\%%';
    #转义
    *思考:如果数据一个引号
        select * from users where firstname = ''';
    #效果:不能执行完成,需要继续输入内容。
            * 所有数据如果含有',请使用转义\'
    
4.3 聚合函数的使用 ,聚合函数:将一组数据整合成一个数据函数
  1. 有多少条记录,计数count(*|字段名称|数字)

    select count(*) from users;
    select count(id) from users;
    select count(co) from users;    
    
    结论: 如果是字段,不对null数据进行计算
    mysql> select count(1) from users;
    
  2. 平均成绩,平均avg(字段名称)

    select avg(成绩列名) from users;    
    
  3. 不含null 最高成绩,max(字段)

    select max(成绩字段) from users;
    
  4. 最小年龄,min(字段)

    select min(age) from users;
    
  5. 班级总成绩,求和sum(字段)

    select sum(count) from users;
    
  6. 平均成绩

    select sum(count)/count(*) from users;
    
  7. 查询所有的年龄数

    mysql> select age from users;
    排序格式:select .... where ... order by 排序字段 asc|desc                * asc 升序,默认可以不写
           * desc 降序
       mysql> select age from users order by age desc;
    
  8. 去重复

    mysql> select distinct age from users order by age desc;
    mysql> select distinct age,count from users order by age desc;
        * age 和count 必须一样才重复
    mysql> update users set count = 60 where id = 'u006'; # 两个18和60,将去重
    
  9. 总结: max /min/avg/sum/计算的字段类型必须是整形

    * 设置没有考试
        * update users set count = null where id = 'u006';
    
4.4 分组
  1. 添加班级字段(classes)

    mysql> alter table users add column classes varchar(3);
    mysql> update users set classes='1' where id in ('u001','u002','u003','u004');
    mysql> update users set classes='2' where id in ('u005','u006','u007');
    
  2. 查询1班和2班的平均成绩

    * 平均成绩:mysql> select sum(count)/count(*) from users;
    * 分组:select ... where .. group by 分组字段 having 分组条件
        mysql> select sum(count)/count(*) from users group by classes;
    * 注意:查询数据项select... 只能是聚合函数或分组字段
        select classes , sum(count)/count(*) from users group by classes;
        select id, classes , sum(count)/count(*) from users group by classes; #分组之后id没有意义
    
  3. 查询班级平均成绩不及格的班级详细人员信息

    * mysql> select * from users where classes = '2';
    
    • 分组的条件,过滤不及格班级
            mysql> select classes as 班级,sum(count)/count(*) as countAvg from users group by classes having countAvg < 60;

- 多表操作
            select A.* from A,B where A.id = B.id
            select a.* from ,A a,B as b where a.id = b.id
                表的别名:表名 AS 别名
- 结果

            select users.* from users,B as temp where users.classes = temp.classes;
            select users.* from users,(select classes,sum(count)/count(*) as countAvg from users group by classes having countAvg < 60) as temp where users.classes = temp.classes;
            select users.* from users,(select classes,sum(count)/count(*) as countAvg from users group by classes having countAvg < 60) as temp where users.classes = temp.classes;
  1. 总结:

    select distinct *|字段|聚合函数 from 表名
    where 查询条件
    group by 分组字段
        having 分组条件
    order by 排序字段 asc|desc
    

五.总结

5.1 DQL
select *|id from 表名
    where id='u001'
    group by classes having avg < 60
    order by age desc
5.2 DML
insert into 表名(字段) values(值)
update 表名 set 字段=值,字段=值,... where 条件
delete from  表名 where 条件
5.3 DDL
create database 数据库;
drop database 数据库;
create table 表名(字段描述);
    * 字段描述:字段名称  类型  约束
drop table 表名;