MySQL学习记录(简单查询+演示分析)五 DML

来源:互联网 发布:域名便宜 编辑:程序博客网 时间:2024/06/05 04:03

本章关键字:

SELECT                      查询字段信息

SELECT DEPTNO     查询显示所有行,包括重复行  

DISTINCT                   可以从查询结果中清除重复行

where                          字句限定返回的记录

BETWEEN                  运算符显示某一值域范围的记录,包含最小值和最大值

IN                                 运算符获得匹配列表值的记录(包含里面的字段)

NOT IN                        NOT IN(不包含在形参里面的字段)

LIKE                               运算符执行模糊查询

       查询条件可包含文字字符或数字

                                      (%) 可以表示零或多个字符
                                       ( _ ) 可表示一个字符 */

AND                               需要所有条件都是满足,  

OR                                   只要两个条件满足一个就可以了

NOT                                 是取反的意思  

order by 排序             按照sal从低到高排序  注意:默认为ASC,加不加ASC效果一样。

                                  从高到低排序 (DESC)



#先创建表

CREATE TABLE tb_EMP

(
  EMPNO    INT PRIMARY KEY,    #员工编号
  ENAME    VARCHAR(10),        #员工姓名
  JOB      VARCHAR(9),         #工作岗位
  MGR      INT,                #部门经理
  HIREDATE DATE,               #入职日期
  SAL      INT,                #薪水
  COMM     INT,                #奖金
  DEPTNO   INT                 #部门编号
);




CREATE TABLE tb_DEPT
(
     DEPTNO INT PRIMARY KEY,   #部门编号
     DNAME  VARCHAR(14),       #部门名称
     LOC    VARCHAR(13)        #地址
);

#插入表数据
INSERT INTO tb_DEPT
  (DEPTNO,DNAME,LOC)
VALUES
  (10, '财务部', '北京');
INSERT INTO tb_DEPT
  (DEPTNO,DNAME,LOC)
VALUES
  (20, '研发部', '广州');
INSERT INTO tb_DEPT
  (DEPTNO,DNAME,LOC)
VALUES
  (30, '市场部', '上海');
INSERT INTO tb_DEPT
  (DEPTNO,DNAME,LOC)
VALUES
  (40, '运维部', '成都');
  
  


INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
   (7369, '史密斯', '文员', 7902, '1980-12-17',800,20);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES
   (7499, '艾伦', '市场营销', 7698, '1981-02-20',1600,300,30);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES
   (7521, '跃德', '市场销售', 7698, '1981-02-22',1250,500,30);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
   (7566, '琼斯', '经理', 7839, '1981-02-04',2975,20);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES
   (7654, '马丁', '市场销售', 7698, '1981-09-28',1250,1400,30);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
   (7698, '布莱克', '经理', 7839, '1981-01-05',2850,30);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
   (7782, '克拉克', '经理', 7839, '1981-06-09',2450,10);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
   (7788, '斯科特', '分析师', 7566, '1987-04-19',3000,20);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, HIREDATE, SAL, DEPTNO)
VALUES
   (7839, 'KING', '董事长','1981-11-17',5000,10);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)
VALUES
   (7844, '特纳', '市场销售', 7698, '1981-09-08',1500, 0, 30);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
   (7900, '詹姆斯', '文员', 7698, '1981-12-03',950,30);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
   (7902, '佛尔德', '分析师', 7566, '1981-12-03',3000,20);
INSERT INTO tb_EMP
   (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, DEPTNO)
VALUES
   (7934, '邦德', '市场销售', 7782, '1982-01-23',1300,10);




#         SELECT(*, column [alias],...) FROM table; 
#中文翻译:   查找(SELECT) 字段,字段  从(FROM) 表(tb_dept)
   
SELECT deptno,dname,loc FROM tb_dept
SELECT * FROM tb_dept                  #*表示所有的列
SELECT DNAME FROM tb_dept              #查询单个字段信息




#算数表达式
SELECT ename, sal, sal*12               #查询工资(sal)*12 相当于查询年薪
FROM tb_emp;




/*乘法和除法的优先级高于加法和减法
同级运算的顺序是从左到右
表达式中使用括号可强行改变优先级的运算顺序*/

SELECT ename, sal, sal*12+100
FROM tb_emp;
SELECT ename, sal, sal*(12+100)
FROM tb_emp;




#NULL和0还有空字符串不是一个概念
SELECT * FROM tb_emp;
SELECT * FROM tb_emp WHERE comm = 0;
SELECT * FROM tb_emp WHERE comm IS NULL;




/*
改变列的标题头
用于表示计算结果的含义
作为列的别名
如果别名中使用特殊字符,或者是强制大小写敏感,或有空格时,都可以通过为别名添加加双引号实现。
*/

SELECT ENAME '姓名', SAL '薪水'      #将ENAME和SAL转换成别名:姓名和薪水
FROM tb_emp;
SELECT ename, sal*12 AS '年薪'    #AS代表标准,不加效果也是一样
FROM tb_emp;




#缺省情况下查询显示所有行,包括重复行     
SELECT DEPTNO
FROM tb_emp;




#使用DISTINCT关键字可以从查询结果中清除重复行
SELECT DISTINCT DEPTNO
FROM tb_emp




#DISTINCT的作用范围是后面所有字段的组合
SELECT DISTINCT DEPTNO, job                            #查询job,从tb_emp表中,而且DEPTNO=20
FROM tb_emp WHERE DEPTNO=20;




#使用where字句限定返回的记录
SELECT *
FROM tb_emp
WHERE DEPTNO=10;




#比较运算符  注意:< > 相当于"不等于"
SELECT ENAME, SAL, COMM, JOB
FROM tb_emp
WHERE SAL<=1500 AND SAL<=3000;




#使用BETWEEN运算符显示某一值域范围的记录,包含最小值和最大值
SELECT ENAME, SAL
FROM tb_emp
WHERE sal BETWEEN 1500 AND 3000;             #此处比较包含1500和3000




#使用IN运算符获得匹配列表值的记录
SELECT EMPNO, ENAME, SAL, MGR
FROM tb_emp
WHERE MGR IN (7902, 7566, 7788)            #IN(包含形参里面的)




SELECT EMPNO, ENAME, SAL, MGR
FROM tb_emp
WHERE MGR NOT IN (7902, 7566, 7788)    #NOT IN(不包含在形参里面)




/*使用LIKE运算符执行模糊查询
查询条件可包含文字字符或数字
(%) 可以表示零或多个字符
( _ ) 可表示一个字符 */



SELECT ENAME 
FROM tb_emp
WHERE ENAME LIKE '_密%';       #_表示一个字符,中间有'密'的模糊搜索,%表示多个字符


SELECT ENAME 
FROM tb_emp
WHERE ENAME LIKE '__克%';     #__表示二个字符,中间有'克'的模糊搜索,%表示多个字符


SELECT ENAME 
FROM tb_emp
WHERE ENAME LIKE '%克%';      #%多个字符,中间有'克'的模糊搜索,%表示多个字符




#查询包含空值的记录
SELECT ename, mgr
FROM tb_emp
WHERE mgr IS NULL;      #IS NOT NULL(不包含空)




#AND需要所有条件都是满足,  OR只要两个条件满足一个就可以了
SELECT empno, ename, job, sal
FROM tb_emp
WHERE sal>=1100
AND job='文员';         #可将AND job='文员'; 改为OR job='文员';




#NOT是取反的意思                
SELECT ename, job
FROM tb_emp
WHERE job NOT IN ('文员','经理','分析师');    #把所有值都显示出来,除了形参里面的值  




/*
优先级别  job='市场销售'全部查询出来,或者job='董事长'AND sal>1500;
*/



SELECT ename, job, sal
FROM tb_emp
WHERE job='市场销售'
OR job='董事长'
AND sal>1500;


#通过括号限制优先级别
SELECT ename, job, sal
FROM tb_emp
WHERE (job='市场销售'
OR job='董事长')
AND sal>1500;




#order by 排序    按照sal从高到低排序 (DESC)
SELECT *
FROM tb_emp
ORDER BY sal DESC;


#order by 排序    按照sal从低到高排序  注意:默认为ASC,加不加ASC效果一样。
SELECT *
FROM tb_emp

ORDER BY sal ASC;




www.java1234.com

原创粉丝点击