黑马程序员技术交流社区

标题: 【石家庄校区】SQL单表查询语句的使用 [打印本页]

作者: 水煮牛蛙    时间: 2018-5-9 15:22
标题: 【石家庄校区】SQL单表查询语句的使用
本帖最后由 小石姐姐 于 2018-5-11 10:16 编辑

SQL单表查询语句的使用


##数据库的操作:


1.创建数据库
        create database 数据库名称 [character set 字符集 collate 字符集校对规则];


2.查看数据库
        * 查看数据库服务器中所有的数据库:
                        show databases;
        * 查看某个数据库的定义信息:
                        show create database 数据库名称;


3.修改数据库
        alter database 数据库名称 character set 字符集 collate 校对规则;


4.删除数据库
        drop database 数据库名称;


5.其它操作
        * 切换数据库:
                        use 数据库名称;
        * 查看当前正在使用的数据库:
                        select database();


=============================================================
#表的操作


1.查看表
        * 查看该数据库下有哪些表
                        show tables;
        * 查看某个表的结构信息
                desc 表名;
2.删除表
        drop table 表名; //实际开发中基本不使用
        
3.修改表
        1.添加列
                alter table 表名 add 列名 类型(长度) 约束;
        2.修改列类型,长度和约束
                alter table 表名 modify 列名 类型(长度) 约束;
        3.删除列
                alter table 表名 drop 列名;
        4.修改列名称
                alter table 表名 change 旧列名 新列名 类型(长度) 约束;
        5.修改表名
                rename table 表名 to 新的表名;
        6.修改表的字符集
                alter table 表名 character set 字符集;


=============================================================


##表记录操作


1.添加表的记录
        1.语法: (添加记录)
         * 向表中插入某些列:
                        insert into 表名 (列名1,列名2,列名3…) values (值1,值2,值3…)
         * 向表中插入所有列:
                        insert into 表名 values (值1,值2,值3…);
        1.1语法使用
                * 添加某几列
                        insert into user (id,username,password) values (null,'aaa','123');
                * 添加所有列
                        insert into user values (null,'bbb','123',23,'1993-09-01');
                * 添加中文记录
                        insert into user values (null,'张三','123',23,'1993-09-01');
                        //将my.ini文件中的 [client] 下的字符集改为 gbk
                        //重启mysql服务
2.修改表的记录
        1.语法
                update 表名 set 列名=值,列名=值 [where 条件];
        1.1语法的使用
                * 修改某一列的所有值
                        update user set password = 'abc';
                * 按条件修改数据
                        update user set password = 'xyz' where username = 'bbb';
                * 按条件修改多个列
                        update user set password='123',age=34 where username='aaa';


3.删除表的记录
        1.语法  
                delete from 表名 [where 条件]; //属于 DML 语句
        1.1语法的使用
                * 删除某一条记录
                        delete from user where id = 2;
                * 删除表中的所有记录
                        delete from user;
               
        //使用 DDL 语句删除表中的所有记录
                * truncate table user;
//数据的回滚
        * rollback;


4.查看表的记录
        1.语法
                select [distinct] *|列名 from 表 [条件];
        1.1语法的使用
                * 查询所有学生考试成绩信息
                        select * from exam;
                * 查询所有学生的姓名和英语成绩
                        select name,english from exam;
                * 查询英语成绩信息(不显示重复的值),关键字 distinct
                        select distinct english from exam;
                * 查看学生姓名和学生的总成绩
                        select name,english+chinese+math from exam;
                * 别名查询
                        select name,english+chinese+math as sum from exam;
        2.条件查询
                1.语法
                        使用where子句
                        * > , < , >= , <= , <> ,=   // <> 为不等于
                        * like:模糊查询
                        * in:范围查询
                        * 条件关联:and , or ,not   // not 为非
                1.1语法的使用
                        * 查询李四学生的成绩:
                                select * from exam where name = '李四';
                        * 查询名称叫李四学生并且英文大于90分
                                select * from exam where name = '李四' and english > 90;
                        * 模糊查询
                                * like ‘李_’                :名字中必须是两个字,而且是姓李的。
                                * like ‘李%’                :名字中姓李的学生,李子后可以是1个或任意个字符。
                                * like ‘%四’                :名字中以四结尾的。
                                * like ‘%王%’           :只要名称中包含这个字就可以。
                                //字符/数字都行
                                
                                例: select * from exam where name like '李%';
                        * 范围查询
                                * 查询英语成绩是69,75,89学生的信息
                                select * from exam where english in (69,75,89);
        3.排序查询
                1.语法
                * 使用order by 字段名称 asc/desc;  //默认为升序
                        *asc 升序查询
                        *desc 降序查询
                1.1语法的使用
                        * 查询学生信息,并且按照语文成绩进行排序:
                                select * from exam order by chinese; //此处默认使用asc升序
                        * 查询学生信息,并且按照语文成绩 倒序 排序:
                                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;
        4.分组统计查询
                4.1聚合函数使用
                        1.求和
                           sum();
                        1.1语法的使用
                                * 获取所有学生的英语成绩的总和:
                                        select sum(english) from exam;
                                * 获取所有学生的英语成绩和数学成绩总和:
                                        select sum(english),sum(math) from exam;
                                * 查询姓李的学生的英语成绩的总和
                                        select sum(english) from exam where name like '李%';
                                * 查询所有学生各科的总成绩:
                                        //第一种
                                        select sum(english)+sum(chinese)+sum(math) from exam;
                                        //第二种
                                        select sum(english+chinese+math) from exam;
                                        //为了避免null值的影响,需使用 ifnull 函数
                                        select sum(ifnull(english,0)+Chinese+math) from exam;
                                        // 将null 当 零 使用;
                                        // null加任何值都是null;
                        2.获取总记录数
                                count();  //括号内可以写任何参数,最好写表的主键
                                1.1语法的使用
                                        * 获得学生的总数
                                                select count(*) from exam;
                                        * 获得姓李的学生的个数
                                                select count(*) from exam where name like '李%';
                        3.获取最大值
                                max();
                                1.1语法的使用
                                        * 获得数学成绩的最高分:
                                                select max(math) from exam;
                        4.获取最小值
                                min();
                                1.1语法的使用
                                        * 获得语文成绩的最小值
                                                select min(chinese) from exam;
                        5.获取平均值
                                avg();
                                1.1语法的使用
                                        * 获取语文成绩的平均值
                                                select avg(chinese) from exam;
                4.2分组查询
                        group by 字段名称;                        
                        1.1语法的使用
                                * 按商品名称统计,每类商品所购买的个数:
                                        select product,count(*) from orderitem group by product;
                                * 按商品名称统计,每类商品所花费的总金额:        
                                        select product,sum(price) from orderitem group by product;        
                                * 按商品名称统计,统计每类商品花费的总金额在5000元以上的商品               
                                                //where的子句后面不能跟着聚合函数。如果现在使用带有聚合函数的条
                                                //件过滤(分组后条件过滤)需要使用一个关键字having
                                        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;
        select product,sum(price) from orderitem  group by product having(sum(price) > 5000) order by sum(price) asc;
                                                
                                //having 一般是配合分组使用                 
                                                
###总结 //下边是查询语句的组合顺序
        S(select)… F(from)…W(where)…G(group by)…H(having)…O(order by);
        sfwgho




1、where和having的区别:
        where是在分组前进行条件过滤的
         having字句是在分组后进行条件过滤的
         where字句中不能使用聚合函数
         having字句中可以使用聚合函数和一般过滤条件
2、查询结果限定
        使用limit
        select...limit offset_start,row_count;
        offset_start: 第一个返回记录行的偏移量,默认为0
        row_count: 要返回记录行的最大数目




其它指令:
               
* 退出 : exit
* 查看表中建立的各种约束 和 约束的名字
                show create table 表名;
* 删除唯一约束
                alter table 表名 drop key 约束名;
                        
##SQL的分类:               
        1.DDL:数据定义语言
                create,drop,alter..
        2.DCL:数据控制语言
                grant,if…
        3.DML:数据操纵语言
                insert,update,delete…
        4.DQL:数据查询语言
                select        






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2