ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

03 基本的Select语句

2022-06-21 02:02:18  阅读:131  来源: 互联网

标签:语句 03 jiang 1700 employees select NULL id Select


3.1 select .....

select 1; # 没有字句
/*
查询结果:
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.01 sec)
*/

3.2 select ... from ...

# 语法
select 标识选择哪些列(*表示全选) from 表示从那个表中选择;

# 例子
select * from departments;
/*
+---------------+----------------------+------------+-------------+
| department_id | department_name      | manager_id | location_id |
+---------------+----------------------+------------+-------------+
|            10 | Administration       |        200 |        1700 |
|            20 | Marketing            |        201 |        1800 |
|            30 | Purchasing           |        114 |        1700 |
|            40 | Human Resources      |        203 |        2400 |
|            50 | Shipping             |        121 |        1500 |
|            60 | IT                   |        103 |        1400 |
|            70 | Public Relations     |        204 |        2700 |
|            80 | Sales                |        145 |        2500 |
|            90 | Executive            |        100 |        1700 |
|           100 | Finance              |        108 |        1700 |
|           110 | Accounting           |        205 |        1700 |
|           120 | Treasury             | NULL       |        1700 |
|           130 | Corporate Tax        | NULL       |        1700 |
|           140 | Control And Credit   | NULL       |        1700 |
|           150 | Shareholder Services | NULL       |        1700 |
|           160 | Benefits             | NULL       |        1700 |
|           170 | Manufacturing        | NULL       |        1700 |
|           180 | Construction         | NULL       |        1700 |
|           190 | Contracting          | NULL       |        1700 |
|           200 | Operations           | NULL       |        1700 |
|           210 | IT Support           | NULL       |        1700 |
|           220 | NOC                  | NULL       |        1700 |
|           230 | IT Helpdesk          | NULL       |        1700 |
|           240 | Government Sales     | NULL       |        1700 |
|           250 | Retail Sales         | NULL       |        1700 |
|           260 | Recruiting           | NULL       |        1700 |
|           270 | Payroll              | NULL       |        1700 |
+---------------+----------------------+------------+-------------+
27 rows in set (0.05 sec)
*/

# 选择特定的列
select manager_id, location_id from departments;
/*
+------------+-------------+
| manager_id | location_id |
+------------+-------------+
|        200 |        1700 |
|        201 |        1800 |
|        114 |        1700 |
|        203 |        2400 |
|        121 |        1500 |
|        103 |        1400 |
|        204 |        2700 |
|        145 |        2500 |
|        100 |        1700 |
|        108 |        1700 |
|        205 |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
| NULL       |        1700 |
+------------+-------------+
*/

3.3 列的别名

  • 给列起别名之后查询出来的表列名用别名替代
  • as 可以省略
  • 别名中如果包含空格需要用双引号
select last_name as lname, commission_pct as comm from employees;
# 省略as也可以
select last_name lname, commission_pct comm from employees;
/*
+-------------+------+
| lname       | comm |
+-------------+------+
| King        | NULL |
| Kochhar     | NULL |
| De Haan     | NULL |
| Hunold      | NULL |
| Ernst       | NULL |
| Austin      | NULL |
| Pataballa   | NULL |
| Lorentz     | NULL |
| Greenberg   | NULL |
*/

3.4 去除重复行

通过DISTINCT关键词来去除重复行

  • DISTINCT必须要放在所有查询列名之前
  • DISTINCT针对后面所有的列名组合去重,简单的说就是去掉后面列名都一致的重复行
SELECT DISTINCT department_id FROM employees;
/*
+---------------+
| department_id |
+---------------+
| NULL          |
|            10 |
|            20 |
|            30 |
|            40 |
|            50 |
|            60 |
|            70 |
|            80 |
|            90 |
|           100 |
|           110 |
+---------------+
12 rows in set (0.05 sec)
*/

# 这条语句会查询出所有列,因为employee_id是表的主键,唯一的,因此每一列都不是重复列
SELECT DISTINCT department_id, employee_id FROM employees;

3.5 空值参与运算

  • 所有的运算符或者是列值遇到null值,运算的结果都为null
# 查询员工一年的工资
SELECT employee_id,salary,commission_pct,
12 * salary * (1 + commission_pct) "annual_sal"
FROM employees;

注:null不等于空字符串。一个空字符串的长度是0,空值的长度是空。

3.6 着重号

当表名或者是列名和关键词或者已有函数重名需要用着重号

select * from ORDER; 
/*1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER' at line 1
*/

select * from `ORDER`;
/*
+----------+------------+
| order_id | order_name |
+----------+------------+
|        1 | shkstart   |
|        2 | tomcat     |
|        3 | dubbo      |
+----------+------------+
3 rows in set (0.04 sec)
*/

3.7 查询常数

查询的时候添加长度可以增加一列字段,用于整合不同的数据源

select 'jiang' as corporation, last_name as lname from employees;
/*
+-------------+-------------+
| corporation | lname       |
+-------------+-------------+
| jiang       | King        |
| jiang       | Kochhar     |
| jiang       | De Haan     |
| jiang       | Hunold      |
| jiang       | Ernst       |
| jiang       | Austin      |
| jiang       | Pataballa   |
| jiang       | Lorentz     |
| jiang       | Greenberg   |
| jiang       | Faviet      |
| jiang       | Chen        |
*/

3.8 显示表结构

使用DESCRIBE或者DESC命令,表示表结构。

DESCRIBE employees;
DESC employees;
/*
+-----------------+-------------+------+-----+---------+-------+
| Field           | Type        | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| department_id   | int         | NO   | PRI | 0       |       |
| department_name | varchar(30) | NO   |     | NULL    |       |
| manager_id      | int         | YES  | MUL | NULL    |       |
| location_id     | int         | YES  | MUL | NULL    |       |
+-----------------+-------------+------+-----+---------+-------+
4 rows in set (0.05 sec)
*/
  • Filed表示字段名
  • Type表示类型
  • Null表示是否可以为null
  • key表示是否存在索引,PRI是主键,UNI表示唯一索引,MUL表示不唯一
  • Defalut表示是否存在默认值,默认值为多少
  • Extra表示可以获取与给定列有关的附加信息,例如AUTO_INCREMENT等

3.10 过滤表数据

用where条件来过滤数据

SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件;
# WHERE需要紧跟这FROM后面

# 查询部门id为90的员工号、姓名、工作id、部门id
SELECT employee_id, last_name, job_id, department_id
FROM employees
WHERE department_id = 90 ;

3.10 练习

  • 查询员工12个月的工资总和,并起别名为ANNUAL SALARY

    select employee_id, 12 * salary as "ANNUAL SALARY" from employees;
    
    # 如果要算上奖金系数的话,需要用到IFNULL函数,如果commission_pct为null取0,不为null取其值
    select employee_id, 12 * salary * (1 + IFNULL(commission_pct, 0)) as "ANNUAL SALARY" from employees;
    
  • 查询employees表中去除重复的job_id以后的数据

    select DISTINCT job_id from employees;
    
  • 查询工资大于12000的员工姓名和工资

    select first_name fname, last_name lname, salary 
    from employees WHERE salary > 12000;
    
  • 查询员工号为176的员工的姓名和部门号

    select first_name fname, last_name lname, department_id 
    from employees WHERE employee_id = 176;
    
  • 显示表 departments 的结构,并查询其中的全部数据

    DESC departments;
    select 8 from departments;
    

标签:语句,03,jiang,1700,employees,select,NULL,id,Select
来源: https://www.cnblogs.com/jiangblog/p/16395370.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有