SQL基础【一.DQL 数据查询语言】

本文详细介绍了SQL中的DQL(数据查询语言),包括SELECT简单查询、数据类型、WHERE条件查询、ORDER BY排序、GROUP BY分组以及函数的使用,如聚合函数、日期和字符转换函数等。此外,还讲解了子查询的两种类型和表连接的不同方式,如内连接、外连接和交叉连接,以及DECODE和CASE WHEN在条件判断中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. DQL 数据查询语言

1.1 SELECT简单查询

1.1 SELECT 语法
select *|常量|函数|字段|计算from 表名;

常量:一些字面值,例如:15,‘xyz’就分别是数值型字面值和字符串型字面值;
函数:我们用的比较多的,通用的代码封装起来,例如:AVG,SUM,count…。用的时候只需要通过函数名称并输入参数的方式来调用,这样可以降低代码的耦合性,减少代码的冗余,提高编程的灵活度和效率。SQL中的函数一般都是加载到数据之后,对结果数据进行操作,得到我们想要的值。
字段:数据表是一个二维表,即:由行和列组成,一列,叫做一个字段,一行,叫做一条记录。
计算:同数值计算,’+‘,’-‘,’,’*‘,’'等

select语句注意事项:
1.要查询展示的内容、顺序、数量、重复是由写的SQL语句来决定;
2.关键字与字段名是不区分大小写的,数据严格区分大小写;
3.与其他列同时展示的时候前面要加上表名。

例: select table.*,sal from table;
1.2 SELECT 别名 AS

列别名的三种方式:

SELECT 列名1 AS "别名",列名2 "别名",列名3 别名 ;
例:select columone as "列名一",columtwo as "列名二"...from table;
例:select columone "列名一",columtwo "列名二"...from table;
例:select columone as lieone,columtwo as lietwo...from table;
表别名 例子:SELECT 列名1...from 表名 别名;
例:select columnoe  lieone,columtwo lietwo...from tableone  biaoone;
例:select columnoe lieone,columtwo lietwo...from tableone "表一";

别名注意事项:
无论表别名还是列别名都只适用当前语句,一旦取了表别名就不能使用原来的名字,别名中建议不要出现汉字、特殊符号、数字,若必须使用,特殊符号与数字要加双引号 " " ,例如:" # " 。

1.3 SELECT 连接符 ||

连接符 || 定义: 将两个或多个字段连接到一起或是将字段与常量连接到一起,连接到一起后会变成一个字段。

 语法:select xuhao||xingming||banji from emp;

注意事项

遇用到别名时用双引号 " " ,遇字符型数据时用单引号 ' ' ;
例:select empno||'的员工是'||ename||'的工资是'||sal a from emp;

字符型数据:指除了数字以外的都是字符型数据。

1.2 数据类型 基本分为三种

在每一个计算机语言里都界定了数据类型,实际上便是对常见的各种各样的数据类型进行了明确的区分。要让计算机计算数值,就传输数字给它;要让它处理文本,就传字符串类型给他们。数据类型是一个标签,是一个有利于SQL掌握每列中期望储存什么类型的数据的手册,它也标志了SQL怎样与储存的数据进行交互。

数值型 / 整值型(NUMBER)表格中靠右

数值数据类型(INTEGER、SMALLINT、DECIMAL和NUMERIC),以及近似数值数据类型(FLOAT、REAL和DOUBLE PRECISION)。

整数类型:BIT,BOOL,MEDIUMINT,TINYINT,SMALLINT,INT, BIGINT;

TINYINT \ SMALLINT \ INT \ BIGINT——这四个数据类型是用以存储整数的,其区别在于:bigint 从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。
int 从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。
smallint 从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整数数据。
tinyint 从 0 到 255 的整数数据。
浮点数类型:FLOAT、DOUBLE、DECIMAL
BIT数据类型保存位字段值,并且支持MyISAM、MEMORY、InnoDB和BDB表。

MySQL支持整数类型TINYINT、MEDIUMINT和BIGINT。下面的表显示了需要的每个整数和浮点数类型的存储大小和用途。
在这里插入图片描述

TINYINT     1byte (-128127) (0255) 小整数值;
SMALLINT    2bytes (-3276832767) (065535) 大整数值;
MEDIUMINT   3bytes (-83886088388607) (016777215) 大整数值;
INT/INTEGER 4bytes (-21474836482147483647) (04294967295) 大整数值;
BIGINT      8bytes (-2^632^63-1) (02^64-1) 极大整数值;
FLOAT       4bytes (-3.402823466 E+383.402823466351 E+38) 0(1.175494351 E- 383.402823466 E+38) 单精度浮点数值;
DOUBLE      8bytes (-1.7976931348623157 E+3081.7976931348623157 E+308) 0(2.2250738585072014 E-3081.7976931348623157 E+308) 双精度浮点数值;
DECIMAL    依赖于M(精度)和D(标度) 的值   依赖于M(精度)和D(标度)的值  小数值(精确定点数);

2.2字符型(VARCHAR)表格中靠左

字符串类型指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

char \ varchar \ text——这几类数据类型是用于储存字符串的,他们的区别在于:
char 固定长度存储数据
varcahr 按变长存储数据
text 当你需要存储非常大量的字符串时使用
nchar、nvarchar、ntext——这几个是用来储存字符串的,与上面的对应是相同的。唯一的区别是这三类都选用Unicode编号,一般在做国际化的网站时应用。

char和varchar
char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。
char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),所以varchar(4),存入3个字符将占用4个字节。
char类型的字符串检索速度要比varchar类型的快。
BLOB 是一个二进制大对象,可以容纳可变数量的数据。有 4 种 BLOB 类型:TINYBLOB、BLOB、MEDIUMBLOB 和 LONGBLOB。它们区别在于可容纳存储范围不同。
有 4 种 TEXT 类型:TINYTEXT、TEXT、MEDIUMTEXT 和 LONGTEXT。对应的这 4 种 BLOB 类型,可存储的最大长度不同,可根据实际情况选择。

在这里插入图片描述

CHAR       0-255 bytes 定长字符串(需要指定长度);
VARCHAR    0-65535 bytes 变长字符串(需要指定长度);
TINYBLOB   0-255 bytes 不超过255个字符的二进制数据;
TINYTEXT   0-255 bytes 短文本字符串;
BLOB       0-65 535 bytes 二进制形式的长文本数据;
TEXT       0-65 535 bytes 长文本数据;
MEDIUMBLOB 0-16 777 215 bytes 二进制形式的中等长度文本数据;
MEDIUMTEXT 0-16 777 215 bytes 中等长度文本数据;
LONGBLOB   0-4 294 967 295 bytes 二进制形式的极大文本数据;
LONGTEXT   0-4 294 967 295 bytes 极大文本数据;

2.3日期型(DATE)表格中带有小三角
时间值的日期和时间类型:DATE、TIME、TIMESTAMP、YEAR、DATETIME、SMALLDATETIME和TIMESTAMP。他们都是用以储存日期和时间信息;

其区别在于:
datetime:存放1/1/1753-12/31/9999的时间数据,精确到0.001s;
smalldatetime: 存放1/1/1900-6/6/2079的时间,精确到秒;

每个时间类型有一个有效值范围和一个”零”值,当指定不合法的MySQL不能表示的值时使用”零”值。

MySQL中TIMESTAMP类型有专有的自动更新特性,若定义一个字段为timestamp(时间戳),这个字段里的时间数据会随其他字段修改的时候自动刷新,所以这个数据类型的字段可以存放这条记录最后被修改的时间。

在这里插入图片描述

DATE 3    YYYY-MM-DD 日期值;
TIME 3    HH:MM:SS时间值或持续时间;
YEAR 1    YYYY 年份值;
DATETIME 8 YYYY-MM-DD HH:MM:SS混合日期和时间值;
TIMESTAMP 4 YYYY-MM-DD HH:MM:SS混合日期和时间值,时间;

1.3 WHERE 条件查询

使用 SQL 从单个表或者多表联合查询数据时,可以使用 WHERE 子句指定查询条件。当给定查询条件时,只有满足条件的数据才会被返回。使用 WHERE 子句来过滤记录,以获取必要的结果集。

语法: 
select *(字段) 
from table(表) 
where conditions(条件); 

说明:
1.多个条件则用“and”或 “or” 连接,交集即“和”条件用“and”,并集即“或”条件用“or”;
2.若含有多个数据库和表名,则<表名>需要指定数据库,写法为<数据库.表名>,数据库和表名用“.”来连接;
3.conditions:查询条件,where 指定要选择的记录必须满足的条件;
4.WHERE 子句不仅可以用在 SELECT 语句中,还可以用在 UPDATE、DELETE 等语句中。

筛选条件分类:
在这里插入图片描述
过滤条件(分为七种)
一、条件的连接 AND & OR

AND --并且 定义:即要满足A条件也要满足B条件;
OR --或者 定义:满足A条件或者满足B条件即可。

单一条件查询:

1:获取一班同学的信息。假设表名为student,班级字段为class。
select * 
from student
where class in ('一班');where class = '一班';

多条件查询:

2:获取一班语、数、英成绩都90分以上同学的相关信息。假设表名为course,获取的字段包括学号ID,名字name,班级class,语文成绩Chinese,数学成绩math,英语成绩English。
select ID,name,class,Chinese,math,English
from student
where class in ('一班')
and Chinese>=90 
and math>=90 
and English>=90;
例:查询10号部门的员工,30号部门的经理以及所有的分析师ANALYSY。
select * 
from emp 
where deptno=10 or deptno=30 and job='MANAGER' or job='ANALYSY';

注意事项:
1.AND 执行顺序优先于OR,有括号先执行括号里的;
2.AND和OR前后都要是完整的条件,可以是不同字段,也可以是不同属性。

二、包含查询 IN & NOT IN

in (集合) 定义:在集合中即满足条件;
not in(集合)定义:不在集合中即满足条件;
集合 : 一组有着相同属性(相同数据类型)的数据,集合中以逗号隔开。

1:找出在10号部门与20号部门的员工信息。
select * 
from emp 
where deptno in(10,20);2:筛选出employees 表中,job_id 是否属于(‘IT_PROT’,‘AD_VP’,‘AD_PRES’)中的一项,比or关键字要好用。
 select last_name 
 from employees 
 where job_id in('IT_PROT','AD_VP','AD_PRES');

三、逻辑运算 :>、< 、>=、<=、=、(!=或<>)
数据型:运算时空值不参与比较且运算符前后数据类型要一致;
字符型数据:严格区分大小写且字符型数据要加单引号;
日期型数据:比较是要用to_date 将字符型转换成日期型,且只能含有两个参数;

例:to_date('1981/12/12','yyyy/mm/dd')--必须加单引号!
1:筛选出employees 表中薪水字段中,工资高于12000的。
select * 
from employees 
where salary>12000;2:筛选出employees 表中薪水字段中,工资高于10000,低于20000的。
select last_name,department 
from employees 
where salary>=10000 and salary<=20000;3:筛选出employees 表,部门编号不在90-110中的,或者是薪资高于15000的。
select * 
from employees 
where not(department_id >= 90 and department_id <= 110) or salary > 15000;

四、模糊查询 LIKE& NOT L

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随薪所欲hello

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值