SQL语法规范、图形化用户界面

SQL语法规范

  1. 不区分大小写,但建议关键字大写,表名、列名小写。
  2. 每条命令以分号或\g结尾。
  3. 每条命令如果很长,可以缩进或换行,建议关键字单独一行。
  4. 注释,主要用于图形化用户界面中。
    • 单行注释:#注释文字-- 注释文字(注意有个空格)
    • 多行注释:/*注释文字*/

图形化用户界面:安装SQLyog。


SQL语言分类

SQL语言又可细分为DQL、DML、DDL、DCL、TCL等几类语言。
DQLData Query Language,数据查询语言,用来从数据库中查询字段,如SELECT
DMLData Manipulation Language,数据操纵语言,对数据库中的数据进行相关操作,如DELETEUPDATEINSERT
DDLData Definition Language,数据定义语言,用于定义或改变表的结构、数据类型等,如CREATEALTERDROPTRUNCATE
DCLData Control Language,数据控制语言,设置或更改数据库用户或角色权限,如GRANTREVOKE
TCLTransaction Control Language,事务控制语言,如COMMITROLLBACKSAVEPOINT


myemployees库的四张表介绍

为了学习SQL语言,我们需要有个数据库用来执行操作。老师给提供了一个SQL脚本导入了四张表。分别是:

  • departments
  • employees
  • jobs
  • locations

下面一个个介绍。

departments

employees

jobs

locations


DQL语言基础查询介绍

有一种说法,80%的SQL语句都用到了SELECT,所以基础查询语句是很重要的。

语法:

SELECT 要查询的东西(们)
FROM 表名

类似于java中的System.out.println( ... );
特点:

  1. 查询列表可以是:表中的字段(最常用)、常量值、表达式、函数
  2. 查询结果是一个虚拟的表格

查询表中的单个字段

SELECT last_name FROM employees;

查询表中的多个字段

SELECT last_name,salary,email FROM employees;

查询表中的所有字段

可以输入SELECT FROM employees,然后光标选中在SELECTFROM之间,双击左侧栏位中的每一项(之间别忘了加上逗号),然后选中已经输入的所有命令,按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 ;