• DQL(Data Query Language)数据查询语言


    数据库的好处

    • 可持久化数据到本地
    • 实现结构化查询

    数据库的常见概念

    • DB(DATABASE):数据库
    • DBMS(DATABASE Management stytem):数据库管理系统
    • SQL:结构化查询语言,用于和数据库通信的语言,不是某个数据库特有的,而是几乎所有主流数据库软件通用的语言

    数据库存储数据的特点

    • 数据存放在表中,然后表再放在库中
    • 一个库中可以存着多张表
    • 表中有一个或者多个列,列又称为"字段"

    MYSQL 的优点

    • 开源,免费,成本低
    • 性能高,移植性好
    • 体积小,便于安装

    MYSQL的启动与停止

    方式一:命令行方式
        启动:net start '服务名'
        停止:net stop '服务名'
    方式二:
        右击计算机 → 管理 → 服务
    

    MYSQL服务的登录和退出

    • 登录
      mysql -h(主机名) - P(端口号) -u(用户名) -p(密码)
    • 退出
      exit或Ctrl + C

    进阶一:基础查询

    语法:

    SELECT `查询列表` FROM `表名`;
    

    特点:

    1.查询列表可以是:表中的字段,常量值,表达式,函数
    2.查询的结果是一个虚拟的表

    查询表中的单个字段:

    SELECT `name` FROM `student`;  
    

    查询表中的多个字段:

    SELECT `name`,`age` FROM `student`;
    

    查询表中的所有字段:

    SELECT * FROM `student`;
    

    按顺序查询表中的所有字段:

    SELECT `age`,`name`,`score` FROM `student`;
    

    查询常量值:

    字符型和日期型的值必须以''引起来

    SELECT 100; 
    SELECT 'john';
    

    查询表达式

    SELECT 100%98
    

    查询函数

    SELECT version();
    

    起别名

    好处:
    便于理解
    如果要查询的字段中有重名的情况,使用别名可以区分开来

    方式一:  
    SELECT 100%98 AS 结果;
    方式二:  
    SELECT 100%98 结果;
    案例:  
    SELECT `name` AS 'out put' FROM student;
    

    去重

    关键字:DISTINCT

    SELECT DISTINCT `class_id` FROM `student`;
    

    +号的作用

    两个操作数都为数值型,则做加法运算
    SELECT 100+90;  
    如果一方为字符型,试图将字符型数值转换成数值型  
    如果转换成功,则继续做加法运算
    SELECT '100'+99;  
    如果转换失败,则将字符型数值转换成0
    例:得到结果为90
    SELECT 'Tom'+90
    只有一方为null,则结果肯定为null
    例:得到结果为null
    SELECT null+90
    

    concat(str1,str2,str3)函数的使用

    将last_name 和 first_name 作为新字段拼接
    例:  
    SELECT CONCAT(last_name,first_name) AS '姓名' FROM `student`;
    

    IFNULL(字段名,要替换为的值)函数的使用

    将成绩为null的值替换为0分
    IFNULL(score,0) AS 成绩;
    

    ISNULL(字段名)函数的使用

    判断字段名,表达式,函数是否有null,返回1和0

    SELECT ISNULL(`score`) FROM `student`;
    

    显示表结构

    关键字:DESC

    DESC `student`;
    

    进阶二:条件查询

    语法

    执行步骤1,2,3,先查询是否有此表,然后执行筛选条件,最后查询列表

    SELECT 
        查询列表    3
    FROM 
        表名    1
    WHERE 
        筛选条件;  2
    
    

    一:按条件表达式筛选

    条件运算符:>,<,=,不等于(!=, <>),>=,<=

    二:按逻辑表达式筛选

    逻辑运算符:and,or,not

    三:模糊查询

    模糊查询:like,betweer and,in,is null

    like特点:

    一般和通配符 % 配合使用,包含0个字符
    _ 任意单个字符

    betweer and

    能提高语句的整洁度
    包含边界值

    in

    用于判断某字段的值是否属于in列表中的某一项
    特点:
    提高语句的简洁度

    is null

    查询为空的条件时不能使用 = null

    案例1.按条件表达式筛选:
    SELECT * FROM `student` WHERE `score` > 80;
    
    案例2.按逻辑表达式筛选:
    SELECT * FROM `student` WHERE name = 'xiaoming' AND sex = 'boy';
    
    案例3.按模糊查询
    SELECT * FROM `student` WHERE `name` LIKE '%a%';
    
    案例4.按模糊查询,要求是90分以上的学生信息
    SELECT * FROM `student` WHERE `score` LIKE '9_';
    
    案例5.查询学生中第二个为_的学生,通过转义
    SELECT * FROM `student` WHERE `name` LIKE '_\_%';
    
        也可以通过ESCAPE '需要转义的字符';
        SELECT * FROM `student` WHERE `name` LIKE '_$_%' ESCAPE '$';
        
    案例6.查询学生分数在60-90之间的学生信息
    SELECT * FROM `student` WHERE `score` BETWEEN 60 AND 90;
    
    案例7.查询名字为小红,小明的学生
    SELECT * FROM `student` WHERE `name` IN ('小红','小明');
    
    案例8.查询值为空的score
    方法一:使用is null
    SELECT `name`,`score` FROM `student` WHERE `score` IS NULL;
    方法二:使用安全等于 <=>
    SELECT `name`,`score` FROM `student` WHERE `score` <=> null;
    
    

    TODO:面试题

    SELECT * FROM `student`; 和 SELECT * FROM `student` WHERE last_name like '%' AND first_name like '%';有什么区别?  
    答:当表中没有null值时,查询的结果是一致的,当表中有null值时,WHERE筛选条件就会过滤为 null 的结果  
    第二条如果 last_name 和 first_name 有索引时,语句会根据索引去查找数据库,而第一条语句会全表扫描,所以第二条语句有索引的情况下会大大提高搜索效率。
    
    

    进阶三:条件查询

    语法

    SELECT 
        查询列表
    FROM
        表名
    WHERE
        筛选条件
    ORDER BY 
        排序列表    ASC|DESC  
    ASC:升序    不加默认为升序
    DESC:降序  
    
    
    
    案例1.成绩按从高到低排序
    SELECT * FROM `student` ORDER BY `score` DESC;  
    
    案例2.成绩按从低到高排序
    SELECT * FROM `student` ORDER BY `score`;
    
    案例3.查询学生分数大于90分,且入学时间从早到晚的学生信息
    SELECT * FROM `student` WHERE `score`> 90 ORDER BY time;
    
    案例4.按表达式排序
    按年薪的高低显示员的信息和年薪
    salary:工资
    bonus:奖金
    SELECT *,`salary` * 12 *(1+IFNULL(Bonus,0)) AS 年薪 FROM `Employee` ORDER BY 年薪;
    
    案例5.按学生的姓名的长度排序
    SELECT LENGTH(name) AS 姓名长度,`name` FROM `student` ORDER BY 姓名长度;
    
    案例6.查询学生信息,要求先按分数升序,再按id降序(当工资相同时,再按id降序排列)
    SELECT * FROM `student` ORDER BY `score` ,`id` DESC;
    
    

    进阶四:常见函数

    语法

    SELECT 
        函数名(实参列表)
    FROM
        表名;
    

    特点

    • 函数名
    • 函数功能

    分类

    • 当行函数
      例:concat、length、ifnull
    • 分组函数
      做统计使用,又称为统计函数,聚合函数,组函数

    字符函数

    length:统计字节个数
    例:SELECT LENGTH('name');
    
    concat:拼接字符串
    例:SELECT CONCAT(last_name,'_',first_name) FROM `student`;
    
    upper:将字符串转换为大写
    lower:将字符串转换为小写
    例:将姓转换为大写,名转换为小写,然后拼接  
    SELECT CONCAT(UPPER(`last_name`),LOWER(`first_name`)) AS 姓名 FROM `student`;
    
    substr/substring:索引取值,索引从1开始,参数传一个str,开始为值,结束位置
    例:SELECT SUBSTR('这是mysql教程',3,7)
    
    姓名中首字符大写,其他字符小写,然后用_拼接,显示为name
    SELECT CONCAT(UPPER(SUBSTR(`last_name`,1,1)),'_',LOWER(SUBSTR(`last_name`,2))) AS `name` FROM `student`;
    
    instr:返回字字符串在主字符串的第一次出现的索引位置,如果找不到返回0
    SELECT INSTR('这是MYSQL教程','是') AS `查找` FROM `student`;
    
    trim:去除字符串中前后的指定字符,默认去除空格
    例:SELECT TRIM('  997    ');
    SELECT TRIM('1' FROM '111999888111') AS `str`;
    
    lpad:用指定的字符实现左填充指定长度
    rpad:用指定的字符实现右填充指定长度
    例:SELECT LPAD('学生')
    
    replace:替换
    SELECT REPLCAE('aaaaaabbbbbbcccccacabcb','a','d') AS `替换后字符串`;
    
    

    数学函数

    round:四舍五入,第一个参数为值,第二个参数为保留的小数位数
    例:SELECT ROUND(1.5689,3);
    
    ceil:向上取整,返回值>=该参数的最小整数
    例:SELECT CEIL(1.00)
    
    floor:向下取整,返回值<=该参数的最小整数
    例:SELECT FLOOR(-8.99)
    
    truncate:截断,第二个参数为值的小数位保留位数
    例:SELECT TRUUNCATE(2.999,2);
    
    mod:取余
    例:SELECT MOD(9,2)
    
    

    日期函数

    now:返回当前系统日期 + 时间
    例:SELECT NOW();
    
    curdate:返回当前系统日期,不包含时间
    例:SELECT CURDATA();
    
    curtime:返回当前系统时间,不包含日期
    例:SELECT CURTIME();
    
    获取指定的部分:年、月、日、小时、分、秒
    例:SELECT YEAR(NOW()) AS 年;
        SELECT MONTH(NOW()) AS 月;
    
  • 相关阅读:
    开发必会系列:加密
    开发必会系列:《Java多线程编程实战》读书笔记
    基础教材系列:Linux原理《趣谈linux》极客时间笔记
    安全测试系列:《web安全深度剖析》读书笔记
    基础教材系列:《计算机网络自顶向下方法》读书笔记
    开发必会系列:《spring实战(第4版)》读书笔记
    开发必会系列:《设计模式》读书笔记
    性能测试面试问答:问题定位思路
    linux命令---dstat强大的性能监测工具(通用的系统资源统计工具:可以实时的监控cpu、磁盘、网络、IO、内存等使用情况。)
    Java中System.setProperty()用法
  • 原文地址:https://www.cnblogs.com/zhouxiongjie/p/12433466.html
Copyright © 2020-2023  润新知