文章目录
一、SQL概述
1.1SQL背景知识
SQL结构化查询语言,是使用关系模型的数据库应用语言,与数据直接打交道,由IBM上世纪70年代开发出来,后由美国ANSI开始指定SQL标准。
- SQL学习可以前往https://www.w3school.com.cn/sql/index.asp
- 不同的数据库生产厂商都支持SQL语言,但都有特有的内容
1.2SQL语言排行
自从SQL加入了编程语言排行榜,一直保持在前Top10。
1.3SQL分类
- 主要分为三类
DDL(数据定义语言)
这些语句定义了不同的数据库、表、视图、索引等数据库对象,还可以用来创建、删除、修改数据库和数据表的结构。
主要语句关键字包括CREATE 、DROP 、ALTER 等DML(数据库操作语言)
用于添加、删除、更新和查询数据库记录、并检查数据的完整性。
主要语句关键字包括INSERT 、DELETE 、UPDATE、SELECT等
SELECT
是SQL最基础的也是最为重要的DCL(数据库控制语言)
用于定于数据库的表、字段、用户的访问权限和安全级别
主要语句关键字包括GRANT 、REVOKE 、COMMIT、ROLLBACK、SAVEPOINT等
因为查询语句使用的非常的频繁,所以很多人把查询语句单独拿出来:DQL(数据查询语言)
还有单独讲COMMIT、ROLLBACK取出来为TCL(事务控制语言)
学习技巧:大处着眼、小处着手。
二、SQL语言的规则和规范
2.1基本规则
- SQL可以在一行或者多行。为了提高可读性,各句子分行写,必要时使用缩进。
- 每条命令以;或 \g 或 \G 结束(单独一句语句执行可以不用;多行语句执行需要;)
- 关键字不能被缩写也不能分行
- 关于标点符号
- 保证所有的()、单引号、双引号是成对结束的
- 必须使用英文状态下的半角输入方式
- 字符串型和日期时间类型的数据可以使用单引号表示
- 列的别名,尽量使用双引号。
2.2SQL大小写规范
MySQL在Windows环境下大小写是不敏感的
MySQL在Linux环境下大小写是不敏感的
- 数据库名、表名、表的别名、变量名是严格区分大小写的
- 关键字、函数名、列名、列的别名是忽略大小写的
推荐采用统一的书写规范
- 数据库名、表名、表别名、字段名、字段别名都是小写
- SQL关键字、函数名、绑定变量等都是大写
2.3注释
可以采用以下的注释方式:
单行注释:#注释文字(MySQL特有的方式)
单行注释:-- 注释文字(-- 后面要有空格)
多行注释:/* 注释文字 */
2.4命名规则
- 数据库和表名不得超过30个字符,变量名限制为29个
- 必须只能包含A-Z、a-z、0-9、_共63个字符
- 数据库名、表名、字段名等对象名中间不要包含空格
- 同一个MySQL软件中数据库不能同名,同一个库中,表不能同名,同一个表中,字段不能同名
- 必须保证字段没有和保留字、数据库系统或常用方法冲突。如果坚持使用,在SQL语句中使用`(着重号)引起来
- 保持字段名和类名的一致性,在命名字段并为其指定数据类型的时候一定要保证一致性。
三、基本SELECT语句
3.1最基本查询-SELECT…
#1
SELECT 1;
#2,DUAL伪表.查询效果1,2一样
SELECT 1+1 FROM DUAL;
#简单查询示例
SELECT 字段1,字段2,... FROM 表名;
#表中所有字段
SELECT * FROM DUAL;
一般情况下,除非需要表中的所有字段数据,最好不要使用*,使用通配符可以节省输入查询的时间,但是获取不需要的列数据通常会降低查询和所使用的程序效率。通配符的优势是在不知道需要的列名情况下,可以通过*获取它们
#选择特点的列
SELECT dish.`name` FROM dish;
3.2列的别名
SELECT dish.`name` 菜名 FROM dish;
也可以引入AS效果都是一样的,可以省略。
SELECT dish.`name` AS 菜名 FROM dish;
也可以使用一对""引起来
SELECT dish.`name` "菜名" FROM dish;
3.3去除重复行
- DISTINCT去除重复数据
SELECT DISTINCT dish.`name` FROM dish;
错误的写法
#错误的写法
SELECT price DISTINCT dish.`name` FROM dish;
#仅仅没报错,但是没有实际意义
SELECT DISTINCT dish.`name`,dish.`price` FROM dish;
3.4空值参与运算
- 空值:null
null不等同于0,'','null'
- 空值参与运算:结果一定为空
SELECT `name`,price "单价",buynum "购买数量",price*(1 + buynum) "最少购买一个的价格" FROM dish;
会出现都是Null的情况
只要空值参与运算结果一定为Null
实际问题解决方法:引入IFNULL
SELECT `name`,price "单价",buynum "购买数量",price*(1 + IFNULL(buynum,0)) "最少购买一个的价格" FROM dish;
如果是NULL的话就用0来替换,保证结果不会为NULL
3.5着重号
错误的示范
#查询ORDER表里面的name字段-错误的
SELECT name FROM ORDER;
因为ORDER是排序的关键字
#查询ORDER表里面的name字段-添加着重号的
SELECT name FROM `ORDER`;
一般情况下不加,因为可能会降低可读性,如果你的表名和字段名和关键字重复,就要加``着重号
3.6查询常数
SELECT '小白学数据库',`name` FROM dish;
#'小白学数据库'为常数
3.7显示表结构
DESCRIBE dish;#显示表中详细信息
DESC dish;#显示表中详细信息
两个方法都可以
3.8过滤数据
SELECT 字段1,字段2
FROM 表名
WHERE 过滤条件
- 使用WHERE子句,将不满足条件的行过滤掉
WHERE子句紧随FROM子句
#查询金额大于10000元的商品信息
SELECT * FROM dish WHERE price >10000;
此文章仅作学习记录用,不做商用