Mysql还有什么需要必知必会

表结构

DROP DATABASE IF EXISTS test1;
CREATE DATABASE test1;
USE test1;
##部门表
#DROP IF EXISTS TABLE DEPT;
CREATE TABLE DEPT(
DEPTNO int PRIMARY KEY,##部门编号
DNAME VARCHAR(14) , ##部门名称
LOC VARCHAR(13) ##部门地址
) ;
INSERT INTO DEPT VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES (30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES (40,'OPERATIONS','BOSTON');
##员工表
#DROP IF EXISTS TABLE EMP;
CREATE TABLE EMP(
EMPNO int PRIMARY KEY, #员工编号
ENAME VARCHAR(10), #员工姓名
JOB VARCHAR(9), #员工工作
MGR int, #员工直属领导编号
HIREDATE DATE, #入职时间
SAL double, #工资
COMM double, #奖金
DEPTNO int #对应dept表的外键
);
## 添加 部门 和 员工 之间的主外键关系
ALTER TABLE EMP ADD CONSTRAINT FOREIGN KEY EMP(DEPTNO) REFERENCES DEPT (DEPTNO);
INSERT INTO EMP VALUES(7369,'SMITH','CLERK',7902,"1980-12-17",800,NULL,20);
INSERT INTO EMP VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30);
INSERT INTO EMP VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30);
INSERT INTO EMP VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO EMP VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30);
INSERT INTO EMP VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO EMP VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO EMP VALUES(7788,'SCOTT','ANALYST',7566,'1987-07-03',3000,NULL,20);
INSERT INTO EMP VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10);
INSERT INTO EMP VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO EMP VALUES(7876,'ADAMS','CLERK',7788,'1987-07-13',1100,NULL,20);
INSERT INTO EMP VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO EMP VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO EMP VALUES(7934,'MILLER','CLERK',7782,'1981-01-23',1300,NULL,10);
#工资等级表
#DROP IF EXISTS TABLE SALGRADE;
CREATE TABLE SALGRADE(
GRADE int, #等级
LOSAL double, #最低工资
HISAL double ); #最高工资
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);

检索数据

-- 最好是关键字大写,其他的小写 
-- 不区分大小写
-- 空格会被忽略
-- 检索单个列
SELECT ename FROM emp
-- 检索多个列
SELECT empno,ename FROM emp
-- 检索所有列 最好不使用通配符*,会降低检索和应用程序的性能
SELECT * FROM emp
-- 检索不同的行 DISTINCT 去重
SELECT DISTINCT job,ename FROM emp
-- 限制结果 LIMIT 5,5 第一个位置为开始位置,第二个数为要检索的行数
SELECT empno,ename FROM emp LIMIT 1,2
-- 使用完全限定的表名
SELECT emp.ename FROM test.emp

排序检索数据

-- 排序数据 order by
SELECT empno FROM emp order by empno
-- 按多个列排序 主要以第一个参数排序,第二个参数次之
SELECT * FROM emp order by empno,ename
-- 指定排序方向 desc降序ASC升序
SELECT empno FROM emp order by empno desc
-- 某列的最大值
SELECT empno FROM emp order by empno desc LIMIT 1

过滤数据

-- 使用where子句 where字句应该位于group by 子句之前
SELECT ename FROM emp where empno = '7654'
-- where子句操作符
-- 检查单个值
SELECT ename FROM emp where empno = '7654'
SELECT ename FROM emp where empno <7654
-- 不匹配检查
SELECT ename FROM emp where empno <>7654
-- 范围值检查
SELECT ename FROM emp where empno between 7654 and 7700
-- 空值检查
SELECT ename FROM emp where mgr is NULL

数据过滤

-- and 操作符
SELECT ename FROM emp where empno < '7654'AND job ='SALESMAN'
-- or 操作符
SELECT ename FROM emp where empno < '7654'OR
job ='SALESMAN'
-- 计算次序
SELECT ename FROM emp where empno < '7654'AND(job ='SALESMAN' OR job ='CLERK')
-- IN 操作符
SELECT ename FROM emp where empno in('7654','7934')
SELECT ename FROM emp where empno in(SELECT empno FROM emp)
-- NOT与IN相反
SELECT ename FROM emp where empno NOT IN('7654','7934')

用通配符进行过滤

-- LIKE操作符 
-- 百分号(%)通配符 任何字符出现任意次数
-- 不区分大小写
SELECT ename FROM emp where ename LIKE '%S%'
SELECT ename FROM emp where ename LIKE '%s%'

SELECT ename FROM emp where ename LIKE 'S%'
SELECT ename FROM emp where ename LIKE '%S'
-- 下划线(_)匹配单个字符
SELECT ename FROM emp where ename LIKE '_ONES'
-- 注意:
-- 1、通配符比其他的搜索所花的时间更长
-- 2、不要过度使用通配符。
-- 3、在确实需要使用通配符时,除非绝对有必要,否则不要把它们用
-- 4、在搜索模式的开始处。把通配符置于搜索模式的开始处,搜索起
-- 来是最慢的。
-- 5、仔细注意通配符的位置。

用正则表达式进行搜索

-- 基本字符匹配
SELECT ename FROM emp where ename REGEXP 'S'
-- .匹配任意单个字符
SELECT ename FROM emp where ename REGEXP 'S...'
-- 进行or匹配
SELECT ename FROM emp where ename REGEXP 'S...|N'
-- 匹配几个字符之一
SELECT ename FROM emp where ename REGEXP '[NS]'
SELECT ename FROM emp where ename REGEXP '[^NS]S'
-- 匹配范围
SELECT ename FROM emp where empno REGEXP '[7782-7934]'
-- 匹配特殊字符 \\转义
SELECT ename FROM emp where ename REGEXP '\\.'
-- 匹配字符类
-- [:alnum:] 任意字母和数字(同[a-zA-Z0-9])
-- [:alpha:] 任意字符(同[a-zA-Z])
-- [:blank:] 空格和制表(同[\\t])
-- [:cntrl:] ASCII控制字符(ASCII 0到31和127)
-- [:digit:] 任意数字(同[0-9])
-- [:graph:] 与[:print:]相同,但不包括空格
-- [:lower:] 任意小写字母(同[a-z])
-- [:print:] 任意可打印字符
-- [:punct:] 既不在[:alnum:]又不在[:cntrl:]中的任意字符
-- [:space:] 包括空格在内的任意空白字符(同[\\f\\n\\r\\t\\v])
-- [:upper:] 任意大写字母(同[A-Z])
-- [:xdigit:] 任意十六进制数字(同[a-fA-F0-9])

-- 匹配多个实例
SELECT * FROM salgrade WHERE salgrade.LOSAL REGEXP '[[:digit:]]{4}'
-- 定位符
SELECT * FROM salgrade WHERE salgrade.LOSAL REGEXP '^1'

创建计算字段

-- 拼接字段 CONCAT 链接串
SELECT CONCAT(ename,'(',empno,')') FROM emp where empno = '7654'
-- RTrim() 去除右边空格
-- LTrim()(去掉串左边的空格)
-- 使用别名
SELECT CONCAT(ename,'(',empno,')') AS empt FROM emp where empno = '7654'
-- 执行算术计算
SELECT ename,SAL-DEPTNO AS empsd FROM emp where empno = '7654'

使用数据处理函数

-- 文本处理函数 
-- Left() 返回串左边的字符
-- Length() 返回串的长度
-- Locate() 找出串的一个子串
-- Lower() 将串转换为小写
-- LTrim() 去掉串左边的空格
-- Right() 返回串右边的字符
-- RTrim() 去掉串右边的空格
-- Soundex() 返回串的SOUNDEX值
-- SubString() 返回子串的字符
-- Upper() 将串转换为大写
SELECT ename,Lower(ename)as Lower_ename from emp where empno = '7654'
-- AddDate() 增加一个日期(天、周等)
-- AddTime() 增加一个时间(时、分等)
-- CurDate() 返回当前日期
-- CurTime() 返回当前时间
-- Date() 返回日期时间的日期部分
-- DateDiff() 计算两个日期之差
-- Date_Add() 高度灵活的日期运算函数
-- Date_Format() 返回一个格式化的日期或时间串
-- Day() 返回一个日期的天数部分
-- DayOfWeek() 对于一个日期,返回对应的星期几
-- Hour() 返回一个时间的小时部分
-- Minute() 返回一个时间的分钟部分
-- Month() 返回一个日期的月份部分
-- Now() 返回当前日期和时间
-- Second() 返回一个时间的秒部分
-- Time() 返回一个日期时间的时间部分
-- Year() 返回一个日期的年份部分
SELECT ename,Lower(ename)as Lower_ename from emp where Date(HIREDATE) between
'1981-09-28' and '1981-12-03'
--  数值处理函数
-- Abs() 返回一个数的绝对值
-- Cos() 返回一个角度的余弦
-- Exp() 返回一个数的指数值
-- Mod() 返回除操作的余数
-- Pi() 返回圆周率
-- Rand() 返回一个随机数
-- Sin() 返回一个角度的正弦
-- Sqrt() 返回一个数的平方根
-- Tan() 返回一个角度的正切

待续…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章