sql语句

作者: 梁庄十年 | 来源:发表于2019-06-02 11:58 被阅读0次

    sql语言的分类

    • DDL: 数据定义语言;如:create,drop,alter等;
    • DCL:数据控制语言;如: grant,if等;
    • DML:数据操纵语言; 如:insert,update,delete等;
    • DQL:数据查询语言;如select等;

    创建表的语法

    create table 表名称(字段名称 字段类型(长度)约束,字段名称 字段类型(长度) 约束,...);
    // 注意:
    // 字段类型: 一个实体对应一个表,一个实体属性对应表的一个字段;
    

    mysql中的数据类型:

    • tinyint
    • smallint
    • int
    • bigint
    • float
    • double
    • bit
    • char
    • varchar
      注意:
      bit是布尔类型,其值只有0和1;

    char和varchar的区别:
    char 代表的是固定长度的字符或字符串;
    varchar代表的是可变长度的字符串;

    约束的作用:
    保证数据的完整性;

    单表的约束可以分为以下几类:

    • 主键约束 :primary 默认唯一非空;
    • 唯一约束:unique;
    • 飞空约束: not null;

    建表示例:

    create table user(
      id int primary key auto_increment,
      username varchar(20) unique,
      password varchar(20) not null,
      age int,
      birthday date,
    )
    

    常用的sql 语法

    创建数据库:

    create database web_test1;
    

    显示所有数据库:

    show databases;
    

    使用数据库:

    use web_test1;
    

    查看某个数据库下所有的表:

    use web_test1; // 切换到想看的数据库;
    show tables; // 显示该数据库下所有的表;
    

    查看某个表的结构信息:

    desc 表名;
    

    删除表:

    drop table 表名;
    

    修改表—给表添加某列:

    alter table 表名 add 列名 类型 (长度)约束;
    

    修改列的类型(长度和约束):

    alter table 表名 modify 列名 类型(长度) 约束;
    

    删除列:

    alter table 表名 drop 列名;
    

    修改列的名称:

    alter table 表名 change 旧列名  新列名 类型(长度) 约束;
    

    修改表名:

    rename table 表名 to 新的表名;
    

    修改表的字符集:

    alter table 表名 character set 字符集;
    

    向表中插入某些列:

    // 方法一:
    insert into 表名 (列名1,列名2,列名3,...) vlaues (值1,值2,值3,...);
    // 方法二:
    insert into values(值1,值2,值3,...);
    

    注意事项:

    • 值的类型和数据库中表列的类型一致;
    • 值的顺序和数据库中表的顺序一致;
    • 值的最大长度不能超过列设置最大长度;
    • 值的类型是字符串或者日期类型时,需要使用单引号 将值括起来;

    示例:

    // 添加某几列;
    insert into users (id,username,password) values(null,'aaa','123');
    //  添加所有的列;
    insert into users values(null,'bbb','123','12','1994-01-01');
    

    注意:如果直接往数据库中插入中文记录会报错;
    解决方式:

    • show variables like '%character%' // 查看数据库中与字符集相关的参数;
    • 需要将mysql 数据库服务器的客户端部分的字符集改为gbk;
    • 找到mysql 的安装路径 修改my.ini文件中的[client]下的字符集 default-character-set=gbk;
    • 重启mysql服务器;

    修改表的记录:

    update 表名 set 列名=值,列名=值[where条件]
    
    

    注意事项:

    • 值的类型与列的类型一致;
    • 值的最大长度不能超过列设置的最大长度;
    • 字符串类型和日期类型添加单引号;
      示例:
    // 修改某一列的所有值;
    update user set password ='abc';
    // 按条件修改数据;
    update user set password='123' where username ='张三';
    // 修改多个列;
    update user set password='123',age=34 where username='李四';
    

    删除表的记录:

    delete from 表名 [where 条件语句];
    // 删除表中的所有记录的方法有两种;分别为:
    delete from user; // 删除所有记录,属于DML语句,是一条一条记录的删除,事务可以作用在DML语句上的;删除后,可以通过回滚恢复数据;
    truncate table user;// 删除所有记录,属于DDL语句,将表删除,然后重新创建一个和删除的表结构一样的表,事务不能控制DDL的;删除后,不能通过回滚恢复数据;
    

    注意事项:

    • 删除表的记录,指的是删除表中的一行记录;
    • 如果没有删除条件,默认删除表中的所有记录;

    示例:

    // 删除表中的某一条数据;
    delete from user where id=1;
    // 删除表中的所有记录;
    delete from user;
    
    

    查询表的记录:

    1. 基本查询:
    select[distinct] * | 列名 from 表 [条件];
    // 查询所有学生的考试成绩信息;
    select * from exam;
    // 查询所有学生的姓名 和 英语成绩;
    select name,english from exam;
    // 查询英语成绩,并去除重复值;
    select distinct english from exam;
    // 查询学生的姓名和 成绩的总和;
    select name,math+english+chinese from exam;
    // 别名查询;
    select name,english+chinese+math as sum from exam; // 此处as 可以省略;
    select name,english+chinese+math sum from exam;
    
    
    1. 条件查询
    • 可以使用where语句;
    • 可以使用 >,<,=,>=,<=,<>;
    • 可以使用like,只要使用与模糊查询;在like字句中可以使用或者%号作为占位符;只能表示一个字符,%可以表示任意个字符;示例如下:
    like '李_':名字中必须是两个字,而且是姓李的;
    like '李%':名字中必须是姓李的,李字后面可以是一个或者任意个字符;
    like '%四':名字必须是四结尾的;
    like '%王%':只要是名称中包含王这个字就可以;
    
    • in:范围查询;
    • 条件关联 and,or,not;

    实例:

    // 查询学生名叫李四的成绩;
    select * from exam where name='李四';
    // 查询名称叫李四 并且英语大于90分的学生;
    select * from exam where name='李四' and english > 90;
     // 查询所有姓李的学生
    select  * from exam name like '李%';
    // 查询英语成绩是69,75,89的这几个学生的信息;
    select * from exam where english in(65,79,89);
    
    
    1. 排序查询
    order by 字段名称 asc/desc(默认是acs);
    //  查询学生信息,并且按照语文成绩进行排序;
    select * from exam order by chinese;
    // 查询学生信息,并且按照语文成绩倒序排序;
    select * from exam  order by chinese desc;
    // 查询学生信息,先按照语文的成绩进行倒序排序,如果成绩相同 ,再按照英语的成绩升序排序;
    select * from exam order by chinese desc ,english asc;
    // 查询姓李的学生信息,并按照英语的成绩倒序排序;
    select * from exam where name like '李%' order by english desc;
    
    1. 分组统计查询

    聚合函数:

    • sum() // 求和;
    • count() // 统计个数;
    • max() // 获取某列的最大值;
    • min() // 获取最小值;
    • avg() // 获取平均值;
    • ifnull() 函数;
    //  获取所有学生的英语成绩的总和;
    select sum(english) from exam;
    //  获取所有学生的英语和数学成绩的总和;
    select sum(english) + sum(math) from exam;
    // 查询姓李的学生的英语成绩的总和;
    select sum(english) from exam where name like '李%';
    // 查询所有学生各科的总成绩
    select sum(english) + sum(math) + math(chinese) from exam;
    select sum(english+math+chinese) from exam;
    // 注意:去除数组库中的数据有null的问题;null和任何数相加等于null;
    select sum(ifnull(english,0)+ifnull(chinese,0) + ifnull(math,0)) from exam;
    // 获得学生的个数;
    select count(*) from exam;
    //  获得姓李的学生的个数
    select count(*) from exam where name like '李%';
    // 获取数学成绩的最高分
    select max(math) from exam;
    // 获取语文成绩的最小值
    select min(chinese) from exam;
    // 获取语文成绩的平均值
    select avg(chinese) from exam;
    
    // 创建表
    create table orderitem (
      id int primary key auto_increment,
      product varchar(20),
      price double
    );
    // 插入数据;
    insert into orderitem (null,'电视机',2999);
    
    
    group by 字段名称;
    // 按商品名称统计,每类商品所购买的个数;
    select  product, count(*) from orderitem group by product;
    // 按商品名称统计,每一类产品的所花费的总金额;
    select product,sum(price) from orderitem group by product;
     // 按商品名称统计,统计每类商品花费的总金额在5000元以上的商品
    select product,sum(price) from orderitem  group by product having sum(price) > 5000;
    // 按商品的名称统计, 统计每类商品花费的总金额在5000元以上的商品,并且按照总金额升序排序;
    select product,sum(price) from orderitem group by product having sum(price) > 5000 order by sum(price) asc;
    
    

    注意:

    • where 的子句后面不能跟聚合函数;

    总结:

    • sql语法一般遵循以下原则,可以省略部分条件,但不可颠倒循序;
      s(select) ... f(from)...w(where)...g(group by)..h(having)..o(order by)

    相关文章

      网友评论

          本文标题:sql语句

          本文链接:https://www.haomeiwen.com/subject/liotxctx.html