test5

85 阅读7分钟

基本配置

一、MySql的启动

  1. 方式一:
    输入services.msc打开服务找到mysql服务进行开关
  2. 方式二:
    在cmd中输入net start mysql以打开MySQL服务

二、登陆

通过在cmd中输入
mysql 【-h主机名 -P端口号 】-u用户名 -p密码
注意:

  • -p和密码之间没有空格
  • 可以通过ctrl+c或者exit推出

三、MySQL常见命令

  1. 查看当前所有数据库
    show databases;
  2. 打开制定的库
    use 库名;
  3. 查看当前库的所有表
    show tables;
  4. 查看其它库的所有表
    show tables from 库名;
    • 可以在处于一个库中的时候查看另一个库的表
    • 查看当前库的名称
      select database()
  5. 创建表
    create table 表名(
       列名 列类型,
       列名 列类型,
       。。。
    );
    
  6. 查看表结构
    desc 表明;

四、查看服务器版本

  1. 在MySQL服务端
    select version()
  2. cmd
    mysql --version
    mysql -v

五、语法规范

  1. 不区分大小写,但建议关键字大写,表明、列名小写
  2. 每条命令分号结尾
  3. 每行命令可以根据需要换行(不写分号就行)
  4. 注释
    1. 单行注释(两种):
    #注释内容
    -- 注释内容      
    2. 多行注释:
    /*注释文字*/
    

SQL语法

一、基本查询

  1. 语法
    select 查询列表 from 表名;
    • 查询列表可以是:表中字段、常量值、表达式、函数
    • 查询的结果是一个虚拟的表格
  2. 查询表中的单个字段
    SElECT last_name FROM employees;
  3. 查询表中的多个字段
    SELECT last_name,salary FROM employees;
  4. 查询表中所有字段
    SELECT * FROM employees
  5. 查询常量值
SELECT 100;
SELECT 'john'
  1. 查询表达式
    SELECT 100%98
  2. 查询函数
//版本
SELECT VERSION();
  1. 起别名

    1. 方式一:用AS
      SELECT 100%8 AS 结果;
    2. 方式二:用空格
      SELECT 100%98 结果
    • 好处:
      • 便于理解
      • 如果查询的字段有重名的情况下,可以使用别名区分开来
    • 注意:如果别名中有空格或特殊符号,要用引号引起来
  2. 去重:DISTINCT关键字

案例:查询员工表中涉及到的所有的部门编号
SELECT DISTINCT department_id FROM employees
  1. MySQL中+号的作用
  • 功能:运算符
#1.两个都为数值型,做加法运算
SELECT 100+90;

#2.只要其中一方为字符型,就会把字符转换为数值,若转换不成功则字符相当于 等于零
SELECT '123'+90;
SELECT 'john'+90

#3.只要一方为null,则结果肯定为null
SELECT null+10;
  1. 一队单引号可以用于区分关键字与要查询的东西
SELECT 'NAME' FROM user
//这里如果没有单引号,NAME就会被认为是关键字
  1. 用CONCAT拼接字符串
#1.SELECT CONCAT('a','b','c') AS 结果
result:abc

#2.SELECT CINCAT(last_name,first_name) AS 结果 FROM employees;

二、条件查询

  1. 语法
SELECT 查询列表 FROM 表名 WHERE 筛选条件;
  1. 分类
    1. 按条件表达式筛选:
      > < = != <=
    2. 按逻辑表达式筛选:
      && || !
    3. 模糊查询
      like
      between and
      in
      is null
  2. 按条件筛选
#案例1:查询工资>12000的员工信息
SELECT * FROM employyes
WHERE salary>12000

#案例2:查询部门编号不等于90号的员工名和部门编号
SELECT last_name,department_id 
FROM employees
WHERE department_id<>90;
  1. 按逻辑表达式筛选
#案例1:查询工资在1000020000之间十五员工名、工资、奖金
SELECT last_name,salary,commission_pct
FROM employees
WHERE salary>=10000 AND salary<=20000

#案例2:查询部门编号不是在90110直接按,或者工资高于15000的员工信息
SELECT * FROM employees
WHERE NOT(department_id>=90 AND department_id<=11) OR salary>15000;
  1. 模糊查询
    1. like
      • 和通配符搭配使用
        1. %:任意多个字符,包含零个
        2. _:表示任意一个字符
      • ESCAPE函数:用来标识任意一个字符为转义字符,也可以直接用\来转义
    #案例1:查询员工名中包含字符a的员工信息
    SELECT * FROM employees
    WHERE last_name LIKE '%a%';
    
    #案例2:查询员工中第三个字符为e,第五个字符为a的员工名和工资
    SELECT last_name,aslary FROM employees
    WHERE last_name LIKE '___e_a';
    
    #案例3:查询员工名中第二个字符为_的员工名
    SELECT last_name FROM employees
    WHERE last_name LIKE '_$_%' ESCAPE '$'
    
    1. between and
      1. 包含临界值
      2. 两个临界值不要调换顺序
      3. 简化代码
    #案例1:查询工资在1000020000之间十五员工名、工资、奖金
    SELECT last_name,salary,commission_pct
    FROM employees
    WHERE salary BETWEEN 10000 AND 20000
    
    1. in
      1. 含义:判断某字段的值是否属于in列表中的某一项
      2. in列表中值的类型必须一致
    #案例1:查询员工的工种编号是IT、AD、AP
    SELECT last_name,job_id from employees
    where job_id="IT" OR job_id="AD" OR job_id="AP";
    #---------------------------------------------------------
    SELECT last_name,job_id from employees
    where job_id in('IT','AD','AP');
    
    1. is null
      1. =或<>不能判断null值
      2. 可以用函数isnull()来判断改值是否为null,并且可以把null设置为指定的值
        //查找Money,如果为nnull,则显示为0
        SELECT isnull(money,o)
        
    SELECT last_name,commission_pct
    FROM employees
    WHERE commission_pct IS NULL;
    
  2. 安全等于<=>
    • <=>既可以判断null值,又可以判断普通的数值
#案例1
SELECT last_name,commission_pct
FROM employees
WHERE commission_pct <=> NULL;

#案例2:查询工资为12000的员工信息
SELECT * FROM employees
WHERE salary <=> 12000;

三、排序查询

  1. 基础
    1. 语法
      • 如果不写asc|desc默认按照升序排列
      • ORDER BY子句支持单个字段,多个字段,表达式,函数,别名
      • ORDER BY子句一般是放在查询语句的最后面,limit子句除外
      SELECT 查询列表 from 列表
      [WHERE 筛选条件]
      order by 排序列表 [asc|desc]
      
    2. 案例
      #案例1:查询员工信息,要求工资从高到低排序
      SELECT * FROM employees
      ORDER BY salary DESC;
      
      #案例2:查询部门编号>=90的员工信息,按入职时间的先后进行排序
      SELECT * FROM employees
      WHERE department_id >= 90
      ORDER BY hiredate ASC;
      
      #案例3:按年薪的高低显示员工的信息【按表达式排序】
      SELECT *,salary*12(1+IFNULL(commission_pct,0)) 年薪
      FROM employees
      ORDER BY salary*12(1+IFNULL(commission_pct,0)) DESC;
      
      #案例4:按年薪的高低显示员工的信息【按别名排序】
      SELECT *,salary*12(1+IFNULL(commission_pct,0)) 年薪
      FROM employees
      ORDER BY 年薪 DESC;
      
      #案例5:按姓名长度显示员工的姓名和工资【按函数排序】
      SELECT * LENGTH(last_name) 字节长度,last_name,salary
      FROM employees
      ORDER BY LENGTH(last_name) DESC;
      
      #案例6:查询员工信息,要求先按工资排序,再按员工编号排序【按多字段排序】
      SELECT * 
      FROM employees
      ORDER BY salary ASC,employee_id DESC;
      
  2. 现阶段各个子句执行顺序
    1. from
    2. where
    3. select
    4. order by

四、常见函数

  1. 概念
    1. 调用
      SELECT 函数名(实参列表) [from 表]
    2. 分类
      • 单行函数
        concat,length,ifnull
        
      • 分组函数(聚合函数,组函数)
        做统计使用,把一组数输出一个值
        
  2. 单行函数
    1. 字符函数
      1. length:获取字符值的字节个数
        SELECT LENGTH('john')
      2. concat:拼接字符串
        SELECT concat(last_name,'_',first_name) FROM employees
      3. upeer、lower
        SELECT UPEER('john')
      4. substr、substring:截取字符串
        • 索引从1开始
      //截取从指定索引出后面所有字符
      SELECT SUBSTR('李莫愁 爱上了李云龙'6) ot_put;
      
      //截取从指定索引处指定字符长度的字符
      SELECT SUBSTR('李莫愁爱上了李云龙'13) out_put;
      
      1. instr:返回子串第一次出现的索引,如果找不到返回0
      SELECT INSTR('杨不悔爱上了杨过','杨过') AS out_put
      
      1. trim
      #去除字符前后的空格
      SELECT TRIM('   二营长   ') AS out_put;
      
      #去除指定的字符
      SELECT TRIM('a' FROM 'aaaaaa我aaa')
      
      1. lpad
      #用指定的字符实现左指定填充长度 
      SELECT LPAD('殷素素'10'*') AS outt_put
      //当字符长度为2时会输出:殷素
      SELECT LPAD('殷素素'2'*') AS outt_put
      
      1. rpad:同上,右填充
      2. replace:替换
      #用李云龙替换二营长
      SELECT REPLACE('李云龙李云龙李云龙二营长二营长','二营长','李云龙') AS out_put
      
    2. 数学函数
      1. round:四舍五入
      #结果:-2
      SELECT ROUND(-1.55)
      
      #保留两位小数
      SELECT ROUND(1.567,2)
      
      1. ceil:向上取整
      2. floor:向下取整
      3. truncate 截断:小数点后保留几位
      //结果:1.6
      SELECT TRUNCATE(1.69999,1);
      
      5.mod:取余
    3. 日期函数
      1. now:返回当前系统日期+时间
      2. curdate: 返回当前日期不包含时间
      3. curtiome:返回当前时间不包含日期
      4. 可以获取指定的年月日小时秒等
      SELECT YEAR(NOW()) 年
      SELECT YEAR(hiredate) 年 FROM employees
      
      1. str_to_date:将字符通过指定的格式转换成日期
      #查询入职日期为1992-4-3的员工
      SELECT * FROM employees WHERE hiredate = '1992-4-3'
      -------------
      SELECT * FROM employees WHERE hiredate = STR_TO_DATE('4-3 1992','%c-%d %y')
      
      1. date_format:将日期转换成字符
      查询有奖金的员工的入职日期(xx月/xx日 xx年)
      SELECT last_name,DATE_FORMAT(hiredat,'%m月%d日 %y年') 入职日期
      FROM employees
      WHERE commission_pct IS NOT null;
      
    4. 流程控制函数
      1. if函数:if else 效果
      SELECT IF(10<5,'大','小');
      
      SELECT IF(commission_pct IS NULL,'啊','嗷')
      FROM employees
      
      1. switch
      #第一种
      SELECT salary,department_id,
      CASE depaerment_id
      WHEN 30 THEN salary*1.1
      WHEN 40 THEN salary*1.2
      WHEN 50 THEN salary*1.3
      END AS 新工资
      FROM employees;
      
      #第二种
      SELECT salary,
      CASE depaerment_id
      WHEN salary>20000 THEN 'A'
      WHEN salary>15000 THEN 'B'
      ELSE 'D'
      END AS 工资级别
      FROM employees;