一. 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 (-128,127) (0,255) 小整数值;
SMALLINT 2bytes (-32768,32767) (0,65535) 大整数值;
MEDIUMINT 3bytes (-8388608,8388607) (0,16777215) 大整数值;
INT/INTEGER 4bytes (-2147483648, 2147483647) (0,4294967295) 大整数值;
BIGINT 8bytes (-2^63,2^63-1) (0,2^64-1) 极大整数值;
FLOAT 4bytes (-3.402823466 E+38, 3.402823466351 E+38) 0 和 (1.175494351 E- 38,3.402823466 E+38) 单精度浮点数值;
DOUBLE 8bytes (-1.7976931348623157 E+308, 1.7976931348623157 E+308) 0 和 (2.2250738585072014 E-308, 1.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