MySQL(3):基本的 SELECT 语句

SQL 语言

SQL(Structured Query Language,结构化查询语言)是使用关系模型的数据库应用语言, 与数据直接打交道 。

SQL 有两个重要的标准,分别是 SQL92 和 SQL99,它们分别代表了 92 年和 99 年颁布的 SQL 标准,我们今天使用的 SQL 语言依然遵循这些标准。

不同的数据库生产厂商都支持SQL语句,但都有特有内容。

SQL 分类

DDL(Data Definition Languages、数据定义语言) ,这些语句定义了不同的数据库、表、视图、索引等数据库对象 ,还可以用来创建、删除、修改数据库和数据表的结构。
DML(Data Manipulation Language、数据操作语言) ,用于添加、删除、更新和查询数据库记录 ,并检查数据完整性。主要的语句关键字包括 INSERT 、 DELETE 、 UPDATE 、 SELECT 等。SELECT是SQL语言的基础,最为重要。
DCL(Data Control Language、数据控制语言) ,用于定义数据库、表、字段、用户的访问权限和安全级别

主要的语句关键字包括 GRANT 、 REVOKE 、 COMMIT 、 ROLLBACK 、 SAVEPOINT 等。

因为查询语句使用的非常的频繁,所以很多人把查询语句单拎出来一类:DQL(数据查询语言)。还有单独将 COMMIT 、 ROLLBACK 取出来称为TCL (Transaction Control Language,事务控制语言)。

规则与规范

每条命令以 ;\g\G 结束;

关键字不能被缩写也不能分行;

关于标点符号:

必须保证所有的()、单引号、双引号是成对结束的;

必须使用英文状态下的半角输入方式;

字符串型和日期时间类型的数据可以使用单引号(' ')表示;

列的别名,尽量使用双引号(" "),而且不建议省略as;

大小写

MySQL 在 Windows 环境下是大小写不敏感的
MySQL 在 Linux 环境下是大小写敏感的

数据库名、表名、表的别名、变量名是严格区分大小写的

关键字、函数名、列名(或字段名)、列的别名(字段的别名) 是忽略大小写的。

尽量采用统一的书写规范:

数据库名、表名、表别名、字段名、字段别名等都小写

SQL 关键字、函数名、绑定变量等都大写

注释

单行注释:#注释文字(MySQL特有的方式)

单行注释:-- 注释文字(--后面必须包含一个空格。)

多行注释:/* 注释文字 */

命名规则

数据库、表名不得超过30个字符,变量名限制为29个;

必须只能包含 A--Z, a--z, 0--9, _共63个字符;

数据库名、表名、字段名等对象名中间不要包含空格

同一个MySQL软件中,数据库不能同名;同一个库中,表不能重名;同一个表中,字段不能重名;

必须保证你的字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,在SQL语句中使用(着重号)引起来

保持字段名和类型的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。假如数据类型在一个表里是整数,那在另一个表里可就别变成字符型了。

数据导入指令

1.在命令行 客户端登录mysql,使用source指令导入:

sql 复制代码
source 文件的全部路径名

mysql> source d:\mysqldb.sql

2.使用图形化界面的工具导入数据

SQLyog 中选择"工具" --"执行sql脚本"--选中xxx.sql即可。

基本的SELECT语句

SELECT

标识选择哪些列: SELECT
标识从哪个表中选择: FROM
选择全部列:

sql 复制代码
SELECT * 
FROM  departments;

一般情况下,除非需要使用表中所有的字段数据,最好不要使用通配符'*' 。使用通配符虽然可以节省输入查询语句的时间,但是获取不需要的列数据通常会降低查询和所使用的应用程序的效率。通配符的优势是,当不知道所需要的列的名称时,可以通过它获取它们。

选择特定的列:

sql 复制代码
SELECT department_id, location_id
FROM  departments;

SELECTselect的作用是相同的。

列的别名

紧跟列名,也可以在列名和别名之间加入关键字AS,别名可以使用双引号 ,以便在别名中包含空格或特殊的字符 并区分大小写。
AS 可以省略

sql 复制代码
SELECT employee_id AS emp_id,last_name AS lname,department_id AS "id"
FROM employees;

SELECT employee_id emp_id,last_name lname,department_id id
FROM employees;

去除重复行

SELECT语句中使用关键字DISTINCT去除重复行

sql 复制代码
SELECT DISTINCT department_id
FROM employees;

针对于:

sql 复制代码
SELECT DISTINCT department_id,salary
FROM employees;

DISTINCT 其实是对后面所有列名的组合进行去重,通常只需要写一列就可以了,两列没有实际意义。

空值参与运算

所有运算符或列值遇到null值,运算的结果都为null
null 不等于 0
在 MySQL 里面, 空值不等于空字符串。一个空字符串的长度是 0,而一个空值的长度是空。而且,在 MySQL 里面,空值是占用空间的。

非要参与运算,可以使用 IFNULL 函数。

着重号

需要保证表中的字段、表名等没有和保留字、数据库系统或常用方法冲突。如果真的相同,请在SQL语句中使用一对''(着重号)引起来

sql 复制代码
# 错误的
mysql> SELECT * FROM ORDER; 

# 正确的
mysql> SELECT * FROM `ORDER`;

查询常数

sql 复制代码
SELECT 'FDS' AS corporation, last_name FROM employees;

显示表结构

使用DESCRIBEDESC 命令,表示表结构

sql 复制代码
DESCRIBE employees;
或
DESC employees;

Field: 表示字段名称。
Type: 表示字段类型,这里 barcode、goodsname 是文本型的,price 是整数类型的。
Null: 表示该列是否可以存储NULL值。
Key: 表示该列是否已编制索引。PRI表示该列是表主键的一部分;UNI表示该列是UNIQUE索引的一部分;MUL表示在列中某个给定值允许出现多次。
Default: 表示该列是否有默认值,如果有,那么值是多少。
Extra: 表示可以获取的与给定列有关的附加信息,例如AUTO_INCREMENT等

过滤数据

使用WHERE 子句,将不满足条件的行过滤掉
WHERE子句紧随 FROM子句

sql 复制代码
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件
sql 复制代码
SELECT *
FROM employees
WHERE department_id = 90;

数据库学习视频:
【MySQL数据库入门到大牛,mysql安装到优化,百科全书级,全网天花板】

相关推荐
长征coder5 分钟前
AWS MySQL 读写分离配置指南
mysql·云计算·aws
醇醛酸醚酮酯20 分钟前
Qt项目锻炼——TODO清单(二)
开发语言·数据库·qt
ladymorgana40 分钟前
【docker】修改 MySQL 密码后 Navicat 仍能用原密码连接
mysql·adb·docker
PanZonghui44 分钟前
Centos项目部署之安装数据库MySQL8
linux·后端·mysql
GreatSQL社区1 小时前
用systemd管理GreatSQL服务详解
数据库·mysql·greatsql
掘根1 小时前
【MySQL进阶】错误日志,二进制日志,mysql系统库
数据库·mysql
weixin_438335401 小时前
基础知识:mysql-connector-j依赖
数据库·mysql
小明铭同学1 小时前
MySQL 八股文【持续更新ing】
数据库·mysql
Mr_Xuhhh1 小时前
信号与槽的总结
java·开发语言·数据库·c++·qt·系统架构
Fireworkitte2 小时前
Redis 源码 tar 包安装 Redis 哨兵模式(Sentinel)
数据库·redis·sentinel