一、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...
#1SELECT 1;#2,DUAL伪表.查询效果1,2一样SELECT 1+1 FROM DUAL;#简单查询示例SELECT 字段1,字段2,... FROM 表名;#表中所有字段SELECT * FROM DUAL;
一般情况下,除非需要表中的所有字段数据,最好不要使用,使用通配符可以节省输入查询的时间,但是获取不需要的列数据通常会降低查询和所使用的程序效率。通配符的优势是在不知道需要的列名情况下,可以通过获取它们
#选择特点的列SELECT dish.`name` FROM dish;
<img src="https://img-blog.csdnimg.cn/22b2c1dca3cf46fb97571f26e7416c0f.png#pic_center" alt="在这里插入图片描述" data-href="https://greatsql.cn/" style=""/>
在这里插入图片描述
3.2列的别名
SELECT dish.`name` 菜名 FROM dish; 也可以引入AS效果都是一样的,可以省略。SELECT dish.`name` AS 菜名 FROM dish;也可以使用一对""引起来SELECT dish.`name` "菜名" FROM dish;
<img src="https://img-blog.csdnimg.cn/72712955beba43ca82eb690742ffe940.png#pic_center" alt="在这里插入图片描述" data-href="https://greatsql.cn/" style=""/>
在这里插入图片描述
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实际问题解决方法:引入IFNULLSELECT `name`,price "单价",buynum "购买数量",price*(1 + IFNULL(buynum,0)) "最少购买一个的价格" FROM dish;如果是NULL的话就用0来替换,保证结果不会为NULL
<img src="https://img-blog.csdnimg.cn/9fb6a697269a4961b0a6d14c4106685c.png#pic_center" alt="在这里插入图片描述" data-href="https://greatsql.cn/" style=""/>
在这里插入图片描述
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,字段2FROM 表名WHERE 过滤条件
- 使用WHERE子句,将不满足条件的行过滤掉
- WHERE子句紧随FROM子句
#查询金额大于10000元的商品信息SELECT * FROM dish WHERE price >10000;