一,SQL语言分类
(1)数据查询语言(DQL:Data Query Language)其语句,也称为 “数据检索语句”,用以从表中获得数据,确定数据怎样在应用程 序给出。关键字 SELECT 是 DQL(也是所有 SQL)用得最多的 动词。
- SELECT
- FROM
- WHERE
- ORDER BY
- HAVING
(2)数据操作语言(DML:Data Manipulation Language)其语句 包括动词 INSERT,UPDATE 和 DELETE。它们分别用于添加, 修改和删除表中的行。
- INSERT:添加数据
- UPDATE:更新数据
- DELETE:删除数据
(3) 数据定义语言(DDL:Data Definition Language)定义数据库 对象语言,其语句包括动词 CREATE 和 DROP 等。
- CREATE:创建数据库对象
- ALTER:修改数据库对象
- DROP:删除数据库对象
(4 )数据控制语言(DCL:Data Control Language)它的语句通过 GRANT 或 REVOKE 获得许可,确定用户对数据库对象的访问。 GRANT:授予用户某种权限 REVOKE:回收授予的某种权限
- COMMIT:提交事务
- ROLLBACK:回滚事务
- SAVEPOINT:设置回滚点
ps:数据库语言不区分大小写,可以单行多行书写,结尾以分号结尾
二,DQL
(1)SELECT
<1>SELECT
SELECT (DISTINCT可选)*(全部列) or column name (alias) FROM table_name WHERE conditions;
一般来说,SELECT一般都带上FROM和WHERE关键词,条件往后稍稍,首先我们可以对选出的列进行运算,取别名的操作。
在select后,我们可以使用*(通配符)来选择所有列,也可以直接选中某一列(column_name)
其中,可以使用DISTINCT修饰词来去除掉相同的数据,最后可以根据情况来取别名(比如对所选列进行了一系列运算后使得列名称难以得到含义:月薪一列进行乘以12后用年薪别名来取代月薪*12这个列名)。
以下以查询工号,员工名,月薪,年薪,总收入为例:
select employee_ID,employee_name,salary,salary*12 (as) year_salary,salary*12 + extra_salary as income from employees as emp;
查询中的算术表达式,可以采用加减乘除:
<2>FROM
FROM后写入查询目标表名,以逗号隔开,支持取别名:
select * from table_1 t1,table_2 t2 where t1.name = "Jack" and t2.department_id = 11;
以上语句意思为在table_1和table_2中找到名字为jack并且部门号为11的数据。
<3>WHERE
WHERE后写入查询条件,有三大类:一为比较运算,二为逻辑运算,三为其他条件。
比较运算:
不等于也可以用 != 来表示。
逻辑运算:
这个更加简单:AND/OR/NOT
逻辑运算是用来连接不同条件的,其中AND时条件的交集,OR为条件的并集,NOT为条件的补集。
其他条件:
between...and..前者为数值下限,后者为上限。
select * from table where salary between min_salary and max_salary;
in
select employee_id,last_name,salary from employees where salary in(5000,6000,8000);
like是用来匹配字符串的,相较于其他三个更难一些:
%表示零个或多个字符
_表示一个字符
“%s%”表示匹配含有“s”的字符串。
""__123__""表示匹配以这种特定方式摆放的7位数。
is null:
判断是否为空值
综合案例:
select emp.last_name,emp.employee_id,emp.salary from employees as emp
where emp.last_name like "%sa%" and emp.salary between 5000 and 7000
and emp.department_id in (1,2,3);
即找出employees表中员工姓名(emp.last_name)含有"sa"并且工资在5000到7000并且部门ID在1,2,3之间的数据的姓名,id,工资列。
(2)ORDER BY
ORDER BY 语句只要存在,那么就是放在最后。单列排序很简单,按需求来就可以了。
多列排序需要注意的是 按列的顺序来排序,比如a列升序,那么b列会在a列排序的基础上对a列相同数据来进行自己的排序而不会打乱a的排序。
(3)HAVING
HAVING是对GROUP进行筛选的,group可以认为通过某一列的相同值来划分数据为一个一个组,比如工资列中3000-5000的为一组,5000-7000为一组,这就是group by salary,而HAVING就是在划分组后再次对组进行筛选。因为组内元素一般为复数,所以一般通过多行(聚合)函数来进行处理。
标签:salary,name,emp,MySQL,DQL,table,数据,select From: https://blog.csdn.net/ma_no_lo/article/details/141202015