MySQL学习笔记整理

  • 一、认识数据库

    • 数据库的好处

      • 1、可以持久化数据到本地
      • 2、结构化查询
    • 数据库存储数据的特点

      • 1、数据存放到表中,然后表再存放到库中
      • 2、一个库中可以有多张表,每张表具有唯一的表名来标识自己
      • 3、表中有一个或多个列,列又称为“字段”,相当于Java中“属性”
      • 表中每一行数据,就相当于Java中的“对象”
    • 常见的数据库管理系统

      • MySQL(甲骨文)、Oracle(甲骨文)、DB2(IBM公司)、SQLserver(微软)
    • 数据库的常见概念

      • DB:数据库
      • DBMS:数据库管理系统,又称为数据库软件或数据库产品,用于创建或管理DB
      • SQL:结构化查询语言,用于和数据库通信的语言,通用语言
  • 二、了解MySQL

    • MySQL的背景

      • 前身属于瑞典一家公司MySQL AB
      • 08年被sun收购
      • 09年sun被Oracle收购
    • MySQL的优点

      • 1、开源免费、成本低

      • 2、性能高、移植性也好

      • 3、体积小,便于安装

    • MySQL服务的登录和退出

      • 登录:mysql【-h主机名 -p端口号】-u用户名-p密码 , 括号内可省略
      • 退出:exit或者 ctrl+c
    • MySQL的服务的启动和停止

      • 方式一:通过命令行
        • net start 服务名
        • net stop 服务名
      • 方式二:计算机--右击--管理--服务
    • MySQL的安装

      • 属于c/s架构的软件,既有服务端又有客户端,但是一般来讲 安装服务端

      • 安装路径必须是英文的

      • 安装社区版

  • 三、DQL语言(Data QueryLanguage 数据查询语言标准语法)

    • 语法特点

      • 1、不区分大小写,但关键字大写,表名、列小写
      • 2、每条命令最好用分号结尾
      • 3、每条命令根据需要,进行缩进或换行
      • 4、注释:单行注释(#文字)、单行注释(__空格 注释文字)、多行注释(/*注释文字*/)
      • 5、查询列表可以是字段、常量、表达式、函数也可以是多个
      • 6、查询结果是一个虚拟表
      • 7、选中代码,按F12,可将数据格式化
    • 进阶1:基础查询

      • 语法
        • select 查询列表 from 表名;
      • 1、查询单个字段:select 字段名 from 表名;
      • 2、查询多个字段:select 字段名,字段名 from 表名;
      • 3、查询所有字段:select * from 表名;
      • 4、查询常量值:selec 常量值;
        • 注意:字符型和日期型的常量值必须用单引号引起来,数值型不需要
      • 5、查询函数:selec 函数名(实参列表);
      • 6、查询表达式:select 100/123
        • 支持加减乘除 取模 但是不支持Java中的++ -- *=
      • 7、起别名
        • select 字段名 as 别名
        • 起别名为英文含有特殊符号(空格、#等)时,可加上单或双引号:select salary as 'out put' from employees;
        • 案例:select last_name as 姓,first_name as 名 from employees;【此处的as可以省略;】
      • 8、去重:
        • select distinct 字段名 from 表名
        • 注意:只能一个字段名
        • select distinct department_id from employees
      • 9、MySQL中的+号:只有运算符的功能
        • ①select 数值+数值:例如select 100+90:若俩数值相加,则直接加法运算
        • ②select 字符+数值:例如select '120'+90:只要其中一方为字符型,则试图将字符串转换为数值型,转换成功,则继续做加法运算
        • ③select 字符+数值:例如select 'Doris'+90:若转换失败的默认为0,再进行相加
        • ④select null+任何值:只要其中一方为null,则结果肯定为null
        • java中的+号:①运算符,两个操作数都为数值型;②连接符:只要有一个操作数为字符串
      • 10、【补充】连接函数:concat函数
        • 功能:拼接字符
        • select concat(字符1,字符2,字符3,…)
        • SELECT CONCAT(last_name,' ',first_name) AS 姓名 FROM employees;
          • 题目:显示employees的所有列,各个列之间用逗号隔开,列头显示为out_put:
            SELECT
            ​ CONCAT(last_name,',',first_name,',',IFNULL(commission_pct,0)) AS out_put
            ​FROM employees;
      • 11、【补充】ifnull函数
        • 功能:判断某段或表达式是否为null,如果为null,则返回指定的值,否则返回原本的值
        • select ifnull(commission_pct,0)from employees;
      • 12、【补充】isnull函数
        • 功能:判断某字段或表达式是否为null,如果是,则返回1,否则返回0
        • select isnull(commission_pct),commission_pct from employees;
    • 进阶2:条件查询

      • 语法:
        • select 查询表列 from 表名 where 筛选条件;
      • 1、简单条件运算符
        • 按条件表达式筛选,
        • 条件运算符有:> 、 < 、 = 、 != 、 <> 、 >= 、 <= 、<=>安全等于
      • 2、逻辑运算符
        • 按逻辑表达式筛选,逻辑运算符:&& 、 || 、 ! 、 and 、 or 、 not
          • && 和 and:两真才为true
          • || 或 or:只要有一真则为真
          • ! 或 not:若连接的条件本身为false,结果则为true
          • 案例2(and、or、>、<)
            案例2:查询部门编号不是在90到110之间,或者高于15000的员工信息
            ​SELECT
            *
            FROM
            employees
            ①WHERE
            department_id NOT BETWEEN 90 AND 110 OR salary>15000;

            ②或者——————————————————————————————————
            where
            department_id<90 OR department_id>110 OR salary>15000;
            ③或者——————————————————————————————————
            where
            NOT (department_id>=90 AND department_id<=110) OR salary>15000;
      • 3、模糊查询 like、between and、in、is null
        • like
          • 一般和通配符连用,可用于判断字符型,也可以判断数值型
            • %:表示通配符,可以表示0个或多个字符
            • _:表示占位符,只能表示1个字符
          • 案例3(转义符、like)
            #案例3查询员工名中第二个字符为_的员工名
            SELECT
            last_name
            FROM
            employees
            WHERE
            last_name LIKE '_$_%' ESCAPE '$';
          • 例子:select department_id from employees where department_id like '1__' 结果则显示部门编号为1开头的三位数
        • between and
          • 可以提高语句的简洁度
          • 包含临界值,且大小不能颠倒
          • between 100 and 120(相当于A>=100 and A<=120),所以前值小,后值大
          • 案例
            #案例2:查询部门编号不是在90到110之间,或者高于15000的员工信息--------------------------------4
            SELECT
            *
            FROM
            employees
            WHERE
            department_id NOT BETWEEN 90 AND 110 OR salary>15000;
        • in
          • in 含义:判断某字段的值是否属于in列表中的某一项,
          • 特点:
            • ①比or做筛选更简洁
            • ②in列表的值类型必须一致或兼容
            • ③是否等于某一项,而不是模糊判断,所以不支持写通配符%或_,错误示例:in('IT_PORT','AD_%')
          • 案例
            #in 案例:查询员工的工种编号是IT_PROG、AD_VP、AD_PRES中的一个员工名和工种编号
            SELECT
            last_name,
            job_id
            FROM
            employees
            WHERE
            job_id in ('IT_PROG','AD_VP','AD_PRES');
        • is null / is not null
          • 等于=或不等于<> 不能判断null值
          • is null 或is not null 能判断null值
          • 案例
            #is null 案例1:查询没有奖金的员工名和奖金率------------------------------------------10
            SELECT
            last_name,
            commission_pct
            FROM
            employees
            WHERE
            commission_pct is null;
        • 安全等于<=> (可读性较差,不常使用)
          • 案例
            #安全等于<=>
            #案例1:查询没有奖金的员工名和奖金率------------------------------------------11
            SELECT
            last_name,
            commission_pct
            FROM
            employees
            WHERE
            commission_pct <=> null;

            #案例2 查询工资为12000的员工信息----------------------------------------------12
            SELECT
            last_name,
            salary
            FROM
            employees
            WHERE
            salary <=> 12000;
        • 经典面试题
          • 1、试问:select * from employees;和select *from employees where commision_pct like '%%' and last_name like '%%';
            • 答案:不一样;因为奖金率这一列会有null。
          • 2、试问:select * from employees;和select *from employees where commision_pct like '%%' or last_name like '%%' or employee_id like '%%';
            • 答案:一样,因为总会有一字段满足不为null。
    • 进阶3:排序查询

      • 语法:
        • select 查询列表
        • from 表
        • where 筛选条件
        • order by 排序列表 asc/desc
      • 特点:
        • 1、查询asc代表升序,desc代表降序,不写时,默认升序asc
        • 2、order by 子句中支持对单个字段、多个字段、表达式、函数、别名 排序
        • 3、order by 子句一般都是放在查询语句的最后,limit子句除外
      • 案例
        • #案例:查询员工信息,要求工资从高到低排序
        • SELECT
        • *
        • FROM
        • employees
        • ORDER BY salary DESC;
    • 进阶4:常见函数

      • 概念:
        • 类似Java的方法,将一组逻辑语句封装在方法体中对外暴露方法名
      • 好处:
        • 1、隐藏了实现细节
        • 2、提高代码的重用性
      • 调用:
        • select 函数名() 【from 表】;
      • 特点:
        • ①叫什么(函数名)
        • ②干什么(函数功能)
      • 分类
        • 1、单行函数 如concat、length、ifnull等
        • 2、分组函数又称为统计函数、聚合函数、组函数, 其功能:做统计使用
      • (一)单行函数
        • 一、字符函数10个
          • 1、length 获取参数值的字节个数
            • select length (’张三丰hahahaha‘) 其中中文占3位,故字节数为15
            • 字符节查询
              • utf8 表示:一个中文占3个字符,一个英文占1个字符
          • 2、concat 拼接字符串
          • 3、upper、lower变大小写
            • select upper(’john‘);运行结果为JOHN
            • 案例:将姓大写,名小写,然后拼接
              • select concat(upper(last_name),'_',lower(first_name)) 姓名 from employees;
          • 4、substr、substring 截取字段
            • 注意:索引从1开始
            • 案例:截取从指定索引处后面所有字符
              • select substr('李莫愁爱上了陆展元',7)as out_put;
                • 运行结果:陆展元
            • 案例:截取从指定索引处指定字符长度的字符
              • select substr('李莫愁爱上了陆展元',1,3)as out_put;
                • 运行结果:李莫愁
            • #案例: 姓名中首字符大写,其他字符小写,然后用_拼接,显示出来
              • SELECT CONCAT(upper(SUBSTR(last_name,1,1)),'_',lower(SUBSTR(last_name,2))) FROM employees;
          • 5、instr
            • 返回子串第一次出现的索引,如果找不到返回0
              • 案例:select instr('杨不悔爱上了殷六侠’,‘殷六侠’)运行结果为:7
              • 案例:select instr('杨不悔殷六侠爱上了殷六侠’,‘殷六侠’)运行结果为:4
          • 6、trim 去收尾空格 或其他指定字符
            • 案例:select trim(‘ 张翠山 ’) as out_put; 运行结果:张翠山
            • 案例:SELECT TRIM('a' FROM 'aa张翠山a aa'); 运行结果:张翠山a 空格
          • 7、lpad
            • 用指定字符,左填充指定长度
              • 案例: SELECT LPAD('祝思华',2,'*') as out_put; 运行结果:祝思
              • 案例: SELECT LPAD('思华',3,'') as out_put; 运行结果:思华
          • 8、rpad
            • 用指定字符,右填充指定长度
              • 案例: SELECT RPAD('思华',3,'+') as out_put; 运行结果:思华+
              • 案例:SELECT RPAD('祝思华',2,'*') as out_put; 运行结果:祝思
          • 9、replace
            • 案例:SELECT REPLACE('张无忌爱上了周芷若','周芷若','赵敏'); 运行结果:张无忌爱上了赵敏
          • 测试练习题
            • 案例测试练习1:将员工的姓名按首字母排序,并写出姓名的长度(length)
              SELECT last_name,LENGTH(last_name) as 'length'
              FROM employees
              ORDER BY SUBSTR(last_name,1,1) ASC;
            • 案例测试练习4: 做一个查询,产生下面的效果 # earns monthly but wants Dream Salary S
              #ELECT CONCAT(last_name,'earns',salary,'monthly but wants',salary*3) 'Dream Salary'
              FROM employees
              WHERE salary=24000;
        • 二、数学函数
          • 1、round 四舍五入
            • 案例:select round(1.65); 运行结果:2
            • 案例:select round(1.657,2); 运行结果:1.66
          • 2、ceil 向上取整,>=该参数的最小整数
            • 案例:select ceil(1.052); 运行结果:2
            • 案例:select ceil(1.000); 运行结果:1
            • 案例:select ceil(-1.002); 运行结果:-1
          • 3、floor 向下取整,<=该参数的最大整数
            • 案例:select floor(-9.0999); 运行结果:-10
          • 4、truncate 截断函数(即小数点后保留几位)
            • select truncate(1.699,1); 运行结果为1.6
          • 5、mod 取模 取余
            • mod(a,b)=a-a/b*b 所以结果只看被取余数的数的正负即可
            • select mod(10,3);运行结果:1
              • select mod(-10,-3);运行结果:-1
            • 效果同select 10%3;
        • 三、日期函数
          • 1、now 返回当前系统日期+时间
            • select now();
          • 2、curdate 返回当前系统日期
            • select curdate();
          • 3、curtime 返回当前系统时间
            • select curtime();
          • 4、获取指定的部分,年、月、日、小时、分、钟、秒
            • select year(now()) as 年;
            • select month(now()) as 月;
            • select monthname(now()) as 月; 运行结果为:英文月份
          • 5、 str_to_date 将字符转换成日期
            • 将字符通过指定的格式转换为日期
            • 案例:查询入职日期为1992-4-3的员工信息 select STR_TO_DATE('1998-3-2','%Y-%c-%d') as out_put;
              • 注意:括号内带上单引号
          • 6、date_format 将日期转换成字符
            • 将日期通过指定的格式转换为字符
            • 案例1
              • SELECT DATE_FORMAT(NOW(),'%y年%m月%d日') AS out_put;
                • 运行结果:22年05月05日
            • 案例2
              • #案例 查询有奖金的员工名和入职日期(××月/××日 ××××年)
              • SELECT
              • last_name,
              • DATE_FORMAT(hiredate,'%m月%d日 %Y年')
              • FROM
              • employees
              • WHERE
              • commission_pct IS NOT NULL;
        • 四、其他函数【补充】
          • 查询版本号:select version();
          • 查询版本号:select database();
          • 查询用户:select user();
        • 五、流程控制函数【补充】
          • 1、if函数
            • 案例
            • SELECT
            • last_name,commission_pct,IF(commission_pct IS null,'没奖金,呵呵','有奖金') AS 备注
            • FROM employees;
          • 2、case函数
            • 效果一:switch case的效果
              • 案例:
                案例:查询员工的工资,要求
                部门编号=30,显示的工资为1.1倍
                部门编号=40,显示的工资为1.2倍
                部门编号=50,显示的工资为1.3倍
                其他部门,显示的工资为原工资
                • 代码:
                  SELECT salary 原始工资,department_id,
                  CASE department_id
                  WHEN 30 THEN salary1.1

                  WHEN 40 THEN salary1.2
                  WHEN 50 THEN salary*1.3
                  ELSE
                  salary


                  END AS 新工资
                  FROM employees;
            • 效果二:多重if的效果
              • 案例:
                查询员工的工资情况
                如果工资>20000,显示A级别
                如果工资>15000,显示B级别
                如果工资>10000,显示C级别
                否则,显示D级别
                • 代码:
                  SELECT salary,
                  CASE
                  WHEN salary>20000 THEN 'A'
                  WHEN salary>15000 THEN 'B'
                  WHEN salary>10000 THEN 'C'
                  ELSE 'D'
                  END AS 工资级别
                  FROM
                  employees;
      • (二)分组函数
        • 功能
          • 又称为统计函数、聚合函数或组函数
        • 分类
          • 求和、平均、最大、最小、计数
        • 特点
          • 参数支持哪些类型
            • 1、一般都支持数值型
              • sum、avg
                • 数值型
              • max、min
                • 数值型、字符型
              • count
                • 数值型、字符型
                • 但不支持计数 空值null
            • 2、以上分组函数都忽略null值
          • 3、可以和distinct搭配 去重
            • select count(distinct salary),from employees;
          • 4、count函数的详细介绍
            • select count(salary) from employees;
            • 数行数:select count(*) from employees;
            • 数行数:select count(1) from employees;
              • 此处的1可以替换为任何数值,也可替换为任何‘字符’,加上引号,相当于加上一列1,去数1的个数。
            • 效率,优先使用count(*)
              • 在MYISAM存储引擎下,count(*)的效率最高
              • 在INNODB存储引擎下,count(*)和count(1)的效率差不多,比count(字段)效率高一些
          • 5、和分组函数一同查询的字段有限制:要求是group by后的字段
    • 下一篇预告:进阶5:分组查询

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值