暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL基础(一)

三分稚气 2021-04-14
346


主要内容:基础查询,条件查询,排序查询 


1.基础查询

    /*
    语法:
    select 查询列表 from 表名


    特点:
    1-查询的结果集是一个虚拟表
    2-select类似于System.out.printIn(打印内容)
    select后面跟的查询列表,可以有很多个部分组成,中间用逗号隔开
    例如:select 字段1,字段2,字段3 from 表
    System.out.printIn()的打印内容只有一个
    3-执行顺序
    select first_name from employees222;
    a. from子句
    b. select子句
    4-查询列表:


    */


    # 一、查询常量
    SELECT 100;


    # 二、查询表达式
    SELECT 100%3;


    # 三、查询单个字段
    SELECT `last_name` FROM `employees` ;


    # 四、查询多个字段,Fn+F12快速对齐格式
    SELECT
    `last_name`,
    `email`,
    `employee_id`
    FROM
    `employees` ;


    # 五、查询所有字段
    SELECT * FROM `employees`;


    # 六、调用函数、获取返回值
    # 查询当前数据库
    SELECT DATABASE();
    # 查询版本
    SELECT VERSION();
    SELECT USER();


    # 七、起别名
    # 方式一:使用as关键字
    SELECT USER() AS 用户名;
    SELECT USER() AS '用户名';
    SELECT USER() AS "用户名";


    #方式二:使用空格
    SELECT USER() 用户名;
    SELECT USER() '用户名';
    SELECT USER() "用户名";


    # 八、
    # 需求:查询first_name 和last_name 拼接的全名,最终起别名为:姓 名


    # 方案一
    SELECT first_name+last_name AS "姓 名"
    FROM `employees`;


    /*
    Java中+的作用:
    1.加法运算
    2.拼接符
    至少有一方为字符串


    MySQL中+的作用:
    加法运算
    */


    # 方案二:使用concat拼接函数
    SELECT CONCAT (first_name,last_name) AS "姓 名"
    FROM `employees`;




    # 九、distinct的使用
    # 需求:查询员工涉及到的部门
    SELECT DISTINCT `department_id` FROM `employees`;


    # 十、查看表的结构
    DESC employees;
    SHOW COLUMNS FROM employees;


    基础查询案例


    # 1.下面的语句是否可以执行成功?
    SELECT last_name , job_id , salary AS sal
    FROM employees;
    # 可以,换行没问题


    # 2.下面的语句是否可以执行成功?
    SELECT * FROM employees;
    # 可以,意思是查询所有字段


    # 3.找出下面语句的错误
    SELECT employee_id , last_name,
    salsry * 12 "ANNUAL SALARY"
    FROM employees;
    # 题中所有符号都应该用英文


    # 4.显示表departments的结构,并查询全部数据
    DESC departments;
    SHOW COLUMNS FROM departments;
    SELECT * FROM departments;


    # 5.显示出表employees中全部的job_id(不能重复)
    SELECT DISTINCT job_id FROM employees;
    # distinct 表示不能重复


    # 6.显示出表employees的全部列,各个列之间用逗号连接,列头显示为OUT_PUT
    SELECT CONCAT(employee_id , ',' ,first_name , ',' , last_name , ',' ,salary , ',' ,
    IFNULL(commission_pct , '')) AS "OUT_PUT" FROM employees;
    # concat表示拼接,但需要注意的是,拼接值中有NULL时,整体为NULL
    # 可以借用 ifnull:如果不是null,则返回参数1,如果是null,则返回参数2


    SELECT commission_pct , IFNULL(commission_pct , '空') FROM employees;


    复制

    2.条件查询

      /*
      语法:
      select 查询列表
      from 表名
      where 筛选条件;


      执行顺序:
      1.from 子句
      2.where 子句
      3.select 子句


      举例:select last_name , first_name from employees where salary>20000;


      特点:
      1.按关系表达式筛选
      关系运算符:< > >= <= <>
      2.按逻辑表达式筛选
      逻辑运算符:and(&&) , or(||) , not(!)
      3.模糊查询
      like , in , between and , is null


      */


      # 一、按关系表达式筛选
      # 案例1:查询部门编号不是100的员工信息
      SELECT *
      FROM employees
      WHERE department_id <> 100;


      #案例2:工资小于15000的姓名还有工资
      SELECT last_name , salary
      FROM employees
      WHERE salary < 15000;


      # 二、按逻辑表达式筛选
      # 案例1:查询部门编号不是 50-100 之间的员工的姓名、部门编号、邮箱
      # 方式1
      SELECT last_name , department_id , email
      FROM employees
      WHERE department_id<50 OR department_id>100;
      # 方式2
      SELECT last_name , department_id , email
      FROM employees
      WHERE NOT(department_id>=50 AND department_id<=100);


      # 案例2:查询奖金率>0.03 或者 员工编号在66-110之间的员工信息
      SELECT *
      FROM employees
      WHERE commission_pct>0.03 OR (employee_id>=60 AND employee_id<=110);


      # 三、模糊查询
      # 1. like
      /*
      功能:一般和通配符搭配使用,对字符型数据进行部分匹配查询
      常见通配符:
      _ 任意单个字符
      % 任意多个字符
      */


      # 案例1:查询姓名中包含字符a的员工信息
      SELECT *
      FROM employees
      WHERE last_name LIKE '%a%';


      # 案例2:查询姓名中最后一个字符为e的员工信息
      SELECT *
      FROM employees
      WHERE last_name LIKE '%e';


      # 案例3:查询姓名中第一个字符为e的员工信息
      SELECT *
      FROM employees
      WHERE last_name LIKE 'e%';


      # 案例4:查询姓名中第3个字符为x的员工信息
      SELECT *
      FROM employees
      WHERE last_name LIKE '__x%';


      # 案例5:查询姓名中第二个字符为_的员工信息
      SELECT *
      FROM employees
      WHERE last_name LIKE '_\_%';
      # \ :转义字符
      # 也可以自己设置转义字符
      SELECT *
      FROM employees
      WHERE last_name LIKE '_$_%' ESCAPE '$';


      # 2. in
      /*
      功能:查询某字段的值是否属于指定的列表之内
      a in(常量0,常量1,常量2,常量3,...)
      a not in(常量0,常量1,常量2,常量3,...)
      */


      # 案例1 :查询部门编号是30,50,90的员工姓名,部门编号
      SELECT last_name , department_id
      FROM employees
      WHERE department_id IN(30,50,90);


      # 案例2:查询工种编号不是SH_CLERK或IT_PROG的员工信息
      SELECT *
      FROM employees
      WHERE job_id NOT IN ('SH_CLERK','IT_PROG');


      # 3. between and
      /*
      功能:判断某个字段的值是否介于xx之间
      */


      # 案例1:查询部门编号是30-90之间的部门编号、员工姓名
      SELECT department_id ,last_name
      FROM employees
      WHERE department_id BETWEEN 30 AND 90 ;


      # 案例2:查询年薪不是100000-200000之间的员工姓名、工资、年薪
      SELECT last_name , salary , salary*12*(1+IFNULL(commission_pct, 0)) 年薪
      FROM employees
      WHERE salary*12*(1+IFNULL(commission_pct, 0)) <100000 OR
      salary*12*(1+IFNULL(commission_pct, 0)) > 200000;


      SELECT last_name , salary , salary*12*(1+IFNULL(commission_pct, 0)) 年薪
      FROM employees
      WHERE salary*12*(1+IFNULL(commission_pct, 0)) NOT BETWEEN 100000 AND 200000;


      # 4. is null is not null
      # 案例1 :查询没有奖金的员工信息
      SELECT *
      FROM employees
      WHERE commission_pct IS NULL;


      #案例2 :查询有奖金的员工信息
      SELECT*
      FROM employees
      WHERE commission_pct IS NOT NULL ;


      # <=> : 安全等于,既能判断普通内容,又能判断null值


      # 课堂测试


      # 1.查询工资大于12000的员工姓名和工资
      SELECT last_name , salary
      FROM employees
      WHERE salary > 12000;


      # 2.查询员工工号为176的员工的姓名和部门号和年薪
      SELECT employee_id , last_name , department_id,salary*12*(1+IFNULL(commission_pct,0))年薪
      FROM employees
      WHERE employee_id=176;


      # 3.选择工资不在5000到12000的员工的姓名和工资
      SELECT last_name , salary
      FROM employees
      WHERE salary NOT BETWEEN 5000 AND 12000;


      # 4.选择在20 或50 号部门工作的员工姓名和部门号
      SELECT last_name , department_id
      FROM employees
      WHERE department_id IN(20 , 50);


      # 5.选择公司中没有管理者的员工姓名及job_id
      SELECT last_name , job_id
      FROM employees
      WHERE manager_id IS NULL ;


      # 6.选择公司中有奖金的员工姓名,工资和奖金级别
      SELECT last_name , salary , commission_pct
      FROM employees
      WHERE commission_pct IS NOT NULL ;


      # 7.选择员工姓名的第三个字母是a的员工姓名
      SELECT last_name
      FROM employees
      WHERE last_name LIKE '__a%';


      # 8.选择姓名中有a和e的员工姓名
      SELECT last_name
      FROM employees
      WHERE last_name LIKE '%a%' AND last_name LIKE '%e%';


      # 9.显示出表employees中first name 以 e 结尾的员工信息
      SELECT *
      FROM employees
      WHERE first_name LIKE '%e';


      # 10.显示出表中部门编号在80-100之间的姓名、职位
      SELECT last_name,job_id
      FROM employees
      WHERE department_id BETWEEN 80 AND 100;


      # 11.显示表中manager_id 是100,101,110的员工的姓名职位
      SELECT last_name , job_id
      FROM employees
      WHERE manager_id IN (100 , 101 , 110);
      复制

      3.排序查询

        /*
        语法:
        select 查询列表
        from 表明
        where 筛选条件
        order by 排序列表


        执行顺序:
        1.from 子句
        2.where 子句
        3.select 子句
        4.order by 子句


        举例:
        select last_name , salary
        from employees
        where salary>10000
        order by salary ;


        特点:
        1.排序列表可以是单个字段、多个字段、表达式、函数、列数、以及以上的组合
        2.升序,通过asc,默认
        降序,通过deac
        */


        # 一、按单个字段排序
        # 案例1:员工编号大于120的工资降序
        SELECT * FROM employees WHERE employee_id>120 ORDER BY salary DESC;


        # 二、按表达式排序
        # 案例1:对有奖金的员工,按年薪降序
        SELECT * , salary*12*(1+IFNULL(commission_pct,0))年薪
        FROM employees
        WHERE commission_pct IS NOT NULL
        ORDER BY salary*12*(1+IFNULL(commission_pct,0)) DESC;


        # 三、按别名排序
        # 案例1:对有奖金的员工,按年薪降序
        SELECT * , salary*12*(1+IFNULL(commission_pct,0))年薪
        FROM employees
        WHERE commission_pct IS NOT NULL
        ORDER BY 年薪 DESC;


        # 四、按函数的结果排序
        # 案例1:根据姓名的字数长度进行升序
        SELECT LENGTH(last_name),last_name
        FROM employees
        ORDER BY LENGTH(last_name);


        # 五、按多个字段进行排序
        # 案例1:查询员工的姓名、工资、部门编号、先按工资升序、再按部门编号降序
        SELECT last_name , salary , department_id
        FROM employees
        ORDER BY salary ASC , department_id DESC ;


        # 六、按列数排序
        SELECT * FROM employees
        ORDER BY 2;


        # 作业:
        USE myemployees
        # 1.查询员工的姓名和部门号和年薪,按年薪降序
        SELECT last_name , department_id , salary*12*(1+IFNULL(commission_pct , 0))年薪
        FROM employees
        ORDER BY 年薪 DESC;


        # 2.选择工资不在8000到17000的员工姓名和工资,按工资降序
        SELECT last_name , salary
        FROM employees
        WHERE salary NOT BETWEEN 8000 AND 17000
        ORDER BY salary DESC;


        # 3.查询邮箱中包含e的员工信息,并先按邮箱的字节数降序,在按部门编号升序
        SELECT *
        FROM employees
        WHERE email LIKE '%e%'
        ORDER BY LENGTH(email) DESC , department_id;
        复制


        先写这么多,仅供参考,欢迎指点。

        如果你有希望实现的内容,或者在过程中遇到了某些困难,欢迎交流探讨!

        /如有纰漏 请联系我 十分感谢/

        长按图片,点击关注



        文章转载自三分稚气,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

        评论