MySQL||数据库查询操作(一)基本查询与基本操作

向右看齐 2021-11-29 16:44 585阅读 0赞

建立范例数据

为了方便执行操作,我们需要建立一个范例表进行操作,如我们建立一张员工表,表中包含员工的编号,姓名,职务,入职时间,当月收入(美金),当月奖金,系属部门等。

代码如下:

  1. -- 删除数据表
  2. DROP TABLE IF EXISTS emp ;
  3. DROP TABLE IF EXISTS dept;
  4. DROP TABLE IF EXISTS salgrade;
  5. -- 创建数据表
  6. -- 员工表
  7. CREATE TABLE dept (
  8. deptno INT PRIMARY KEY, -- 部门编号
  9. dname VARCHAR(14) , -- 部门名称
  10. loc VARCHAR(13) -- 部门地址
  11. ) ;
  12. -- 员工表
  13. CREATE TABLE emp (
  14. empno INT PRIMARY KEY, -- 员工编号
  15. ename VARCHAR(10), -- 员工姓名
  16. job VARCHAR(9), -- 员工职务
  17. mgr INT, -- 经理的员工编号
  18. hiredate DATE, -- 入职日期
  19. sal DOUBLE, -- 员工收入
  20. comm DOUBLE, -- 奖金
  21. deptno INT -- 部门表外键,代表当前员工属于哪个部门
  22. );
  23. alter table emp add foreign key (deptno) references dept (deptno);
  24. -- 工资等级
  25. CREATE TABLE salgrade (
  26. grade INT, -- 工资等级
  27. losal DOUBLE, -- 当前等级最低收入
  28. hisal DOUBLE -- 当前等级最高收入
  29. );
  30. -- 插入测试数据 —— dept
  31. INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
  32. INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
  33. INSERT INTO dept VALUES (30,'SALES','CHICAGO');
  34. INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON');
  35. -- 插入测试数据 —— emp
  36. INSERT INTO emp VALUES (7369,'SMITH','CLERK',7902,str_to_date('17-12-1980','%d-%m-%Y'),800,NULL,20);
  37. INSERT INTO emp VALUES (7499,'ALLEN','SALESMAN',7698,str_to_date('20-2-1981','%d-%m-%Y'),1600,300,30);
  38. INSERT INTO emp VALUES (7521,'WARD','SALESMAN',7698,str_to_date('22-2-1981','%d-%m-%Y'),1250,500,30);
  39. INSERT INTO emp VALUES (7566,'JONES','MANAGER',7839,str_to_date('2-4-1981','%d-%m-%Y'),2975,NULL,20);
  40. INSERT INTO emp VALUES (7654,'MARTIN','SALESMAN',7698,str_to_date('28-9-1981','%d-%m-%Y'),1250,1400,30);
  41. INSERT INTO emp VALUES (7698,'BLAKE','MANAGER',7839,str_to_date('1-5-1981','%d-%m-%Y'),2850,NULL,30);
  42. INSERT INTO emp VALUES (7782,'CLARK','MANAGER',7839,str_to_date('9-6-1981','%d-%m-%Y'),2450,NULL,10);
  43. INSERT INTO emp VALUES (7788,'SCOTT','ANALYST',7566,str_to_date('19-04-1987','%d-%m-%Y'),3000,NULL,20);
  44. INSERT INTO emp VALUES (7839,'KING','PRESIDENT',NULL,str_to_date('17-11-1981','%d-%m-%Y'),5000,NULL,10);
  45. INSERT INTO emp VALUES (7844,'TURNER','SALESMAN',7698,str_to_date('8-9-1981','%d-%m-%Y'),1500,0,30);
  46. INSERT INTO emp VALUES (7876,'ADAMS','CLERK',7788,str_to_date('23-05-1987','%d-%m-%Y'),1100,NULL,20);
  47. INSERT INTO emp VALUES (7900,'JAMES','CLERK',7698,str_to_date('3-12-1981','%d-%m-%Y'),950,NULL,30);
  48. INSERT INTO emp VALUES (7902,'FORD','ANALYST',7566,str_to_date('3-12-1981','%d-%m-%Y'),3000,NULL,20);
  49. INSERT INTO emp VALUES (7934,'MILLER','CLERK',7782,str_to_date('23-1-1982','%d-%m-%Y'),1300,NULL,10);
  50. -- 插入测试数据 —— salgrade
  51. INSERT INTO salgrade VALUES (1,700,1200);
  52. INSERT INTO salgrade VALUES (2,1201,1400);
  53. INSERT INTO salgrade VALUES (3,1401,2000);
  54. INSERT INTO salgrade VALUES (4,2001,3000);
  55. INSERT INTO salgrade VALUES (5,3001,9999);
  56. -- 事务提交
  57. COMMIT;

结果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pvY2tMaXU_size_16_color_FFFFFF_t_70

查询操作:

select 语句是数据库的查询语句,该语句返回用指定的条件在一个数据库中查询的结果,返回的结果被看作记录的集合。

  • 查询所有列:

在示例表中,我们想查看表里边的全部的数据,或则某一列的数据,这就需要执行以下的语句了

  1. select * from emp;
  2. select ename,job,mgr,hiredate,sal,comm,deptno,empno from emp;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pvY2tMaXU_size_16_color_FFFFFF_t_70 1

  • 投影查询

投影查询就是按照用户需求查询的指定列

  1. select ename,job,hiredate,sal,comm from emp; -- 投影查询

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pvY2tMaXU_size_16_color_FFFFFF_t_70 2

  • 查询中的运算

    —查询每个员工的姓名及年收入
    select ename 员工姓名,sal 12 年收入 from emp;— 举例
    —查询每个员工的姓名及年(收入+奖金)
    select ename 员工姓名,(sal + COALESCE(comm,0))
    12 年收入 from emp;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pvY2tMaXU_size_16_color_FFFFFF_t_70 3

  • 统计查询

concat()函数功能:

将多个字符串连接成一个字符串。

语法:

concat(str1, str2,…)返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。

  1. --五个统计函数
  2. --求最大值
  3. select max(sal) from emp;
  4. select CONCAT('最大值 ',max(sal),'$') from emp;
  5. --求最小值
  6. select CONCAT('最小值',min(sal),'$') from emp;
  7. --求平均值
  8. select CONCAT('平均值',avg(sal),'$') from emp;
  9. --求和
  10. select CONCAT('总共',sum(sal),'$') from emp;
  11. --求总记录数
  12. select CONCAT('总共',count(*),'条') from emp;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pvY2tMaXU_size_16_color_FFFFFF_t_70 4

  • 分组统计

    — 查询各部门员工的平均年收入
    select deptno , avg((sal + COALESCE(comm,0)) 12) 平均年收入 from emp group by deptno
    — 查询不同职务的员工的总年收入
    select job , sum((sal + COALESCE(comm,0))
    12) 平均年收入 from emp group by job
    — 查询各部门下各职务员工的平均年收入
    select deptno,job,avg((sal + COALESCE(comm,0)) 12) 平均年收入 from emp group by deptno,job
    — 查询10,20部门下各职务员工的平均年收入
    select deptno,job,avg((sal + COALESCE(comm,0))
    12) 平均年收入 from emp group by deptno,job having deptno in (10,20) — 不推荐
    select deptno,job,avg((sal + COALESCE(comm,0)) * 12) 平均年收入 from emp where deptno in (10,20) group by deptno,job — 推荐

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pvY2tMaXU_size_16_color_FFFFFF_t_70 5

  • 查询排序

SQL ORDER BY 关键字

ORDER BY 关键字用于对结果集按照一个列或者多个列进行排序。

ORDER BY 关键字默认按照升序对记录进行排序。如果需要按照降序对记录进行排序,您可以使用 DESC 关键字。

coalesce()解释:

返回参数中的第一个非空表达式(从左向右依次类推);

  1. select * from emp order by sal + COALESCE(comm,0) desc;
  2. select * from emp order by sal + COALESCE(comm,0),hiredate ;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0pvY2tMaXU_size_16_color_FFFFFF_t_70 6

具体的实践,读者可以自行验证,参考的仅仅只是示例方法,具体内容以具体示例相结合

发表评论

表情:
评论列表 (有 0 条评论,585人围观)

还没有评论,来说两句吧...

相关阅读

    相关 mysql数据库基本操作

    数据库的简介 数据库 数据库(database,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合。数据库中的数据按一定的数学模型组织、描述和存储,具有较小