SQL语法规范、图形化用户界面
SQL语法规范:
- 不区分大小写,但建议关键字大写,表名、列名小写。
- 每条命令以分号或
\g
结尾。 - 每条命令如果很长,可以缩进或换行,建议关键字单独一行。
- 注释,主要用于图形化用户界面中。
- 单行注释:
#注释文字
或-- 注释文字
(注意有个空格) - 多行注释:
/*注释文字*/
- 单行注释:
图形化用户界面:安装SQLyog。
SQL语言分类
SQL语言又可细分为DQL、DML、DDL、DCL、TCL等几类语言。
DQL:Data Query Language,数据查询语言,用来从数据库中查询字段,如SELECT
。
DML:Data Manipulation Language,数据操纵语言,对数据库中的数据进行相关操作,如DELETE
、UPDATE
、INSERT
。
DDL:Data Definition Language,数据定义语言,用于定义或改变表的结构、数据类型等,如CREATE
、ALTER
、DROP
、TRUNCATE
。
DCL:Data Control Language,数据控制语言,设置或更改数据库用户或角色权限,如GRANT
、REVOKE
。
TCL:Transaction Control Language,事务控制语言,如COMMIT
、ROLLBACK
、SAVEPOINT
。
myemployees库的四张表介绍
为了学习SQL语言,我们需要有个数据库用来执行操作。老师给提供了一个SQL脚本导入了四张表。分别是:
- departments
- employees
- jobs
- locations
下面一个个介绍。
departments
employees
jobs
locations
DQL语言基础查询介绍
有一种说法,80%的SQL语句都用到了SELECT
,所以基础查询语句是很重要的。
语法:
SELECT 要查询的东西(们)
FROM 表名
类似于java中的System.out.println( ... );
特点:
- 查询列表可以是:表中的字段(最常用)、常量值、表达式、函数
- 查询结果是一个虚拟的表格
查询表中的单个字段
SELECT last_name FROM employees;
查询表中的多个字段
SELECT last_name,salary,email FROM employees;
查询表中的所有字段
可以输入SELECT FROM employees
,然后光标选中在SELECT
和FROM
之间,双击左侧栏位中的每一项(之间别忘了加上逗号),然后选中已经输入的所有命令,按F12格式化,就得到:
然后执行查询就可以了。
也可以使用*
,表示“所有的”
SELECT * FROM employees;
但使用*
的缺点是查询的结果和数据库中的表的顺序一样,不够灵活。
细节补充
1) 使用命令行进行数据库查询之前需要先USE 库名称
,而在SQLyog中就不用,它菜单栏中就可以自动确定当前使用的库:
但是使用SQLyog写命令时,还是建议在查询之前写上USE 库名称
。
2) `first_name`中的``表示着重号,可以省略。但如果恰巧遇见以关键字命名的字段,如name,查询命令就变成了SELECT NAME FROM stuinfo
这样的形式,就容易出问题,可读性也差,这时就可以使用着重号标识,表示是一个字段。NAME就变成了`name`。
注意反引号``和单引号‘’的区别。
3) 图形界面上的执行查询默认是执行你已经写的所有的命令。如果你想只执行其中一部分命令,只需选中然后再点击执行(或按F9)即可。
查询常量值
数值型常量值:SELECT 100;
字符型常量值:SELECT 'job';
,MySQL里不区分字符和字符串,单引号双引号都一样。
无需FROM。
查询表达式
如SELECT 100*98;
、SELECT 100%98;
查询函数
如SELECT VERSION();
起别名
方式一:
如
SELECT last_name AS 姓氏, first_name AS 名字 FROM employees;
优点
1)提高可读性,方便理解。
2)如果要查询的字段有重名的情况,使用别名可以区分开来
方式二:
省略AS
:
SELECT last_name 姓氏, first_name 名字 FROM employees;
案例:查询salary,区别名为“out put”
SELECT salary AS "out put" FROM employees;
OUT
是SQL中的一个关键字,所以要用双引号引起来,单引号也行。
去重
案例:查询员工表中涉及到的所有部门编号
SELECT department_id FROM employees;
可以看到有重复的部分。这时就可以用去重,只需在查询字段前加个关键字DISTINCT
:
SELECT DISTINCT department_id FROM employees;
+号的作用
案例:查询员工名和姓,连接成一个字段,显示为 姓 名
你可能会想使用Java中的+号,拼出一个last_name+first_name
,很遗憾这一功能在MySQL中并不适用。
MySQL中+号的功能只有一个,就是作运算符。SELECT 100+90;
,两个操作数都为数值型,则做加法运算;SELECT '123'+90
,两个操作数中其中一个为字符型数据,则试图将字符型数据转换为数值型,转换成功则继续加法运算;SELECT 'john'+90
,转换失败,则将字符型数据取0;SELECT NULL+90
,两个操作数只要其中一个为NULL
,则结果为NULL
。
这样一来,想完成案例任务,就需要使用函数CONCAT()
:
SELECT
CONCAT(last_name, first_name) AS 姓名
FROM
employees ;
习题
显示出表employees的全部列,各个列之间用逗号连接,列头显示成OUT_PUT
。
SELECT
CONCAT(
`first_name`,
',',
`last_name`,
',',
`job_id`,
',',
IFNULL(commission_pct, 0)
) AS out_put
FROM
employees ;