SQL数据查询语言——实际运用参考查询、排序等(简单总结)

建表及插入数据——仅供参考

  --CREATE TABLE Teacher(id int,name char(20),subject char(20),salary float,start_time date,birth date);
    
    CREATE TABLE Teacher(id int,name char(20),subject char(20),salary float);
    INSERT INTO Teacher VALUES(1001,'mage1','S1',6666.666);
    INSERT INTO Teacher VALUES(1002,'mage2','S2',6677.666);
    INSERT INTO Teacher VALUES(1003,'mage3','S3',6688.666);
    INSERT INTO Teacher VALUES(1004,'mage4','S4',6699.666);
    INSERT INTO Teacher VALUES(1005,'mage5','S5',1010.666);
    INSERT INTO Teacher VALUES(1006,'mage6','S6',1111.666);
    INSERT INTO Teacher VALUES(1001,'mage1','S1',6666.666);
    INSERT INTO Teacher VALUES(1007,'mage7','S1',1212.666);
    INSERT INTO Teacher VALUES(1008,'age','S1',6611.666);
    INSERT INTO Teacher VALUES(1009,'bge','S1',6622.666);
    
    CREATE TABLE Employee(id int,name char(20),post char(20),base_sal float,royalty float);
    INSERT INTO Employee VALUES(19001,'xiu','SSS',6000,1.6);
    INSERT INTO Employee VALUES(19002,'xie','SS',5500,1.4);
    INSERT INTO Employee VALUES(19003,'pang','SSSSS',10000,1.8);
    INSERT INTO Employee(id,name,post,base_sal) VALUES(19004,'sun','A',15000);
    INSERT INTO Employee VALUES(19005,'xiu1','SSS',5000,1.4);
    INSERT INTO Employee VALUES(19006,'xiu2','SS',7000,1.2);
    INSERT INTO Employee VALUES(19007,'xiu3','SSS',4500,1.8);
    INSERT INTO Employee VALUES(19008,'xiu4','SSS',4500,1.6);
    INSERT INTO Employee VALUES(19009,'xiu4','SSS',4500,1.9);
    
    CREATE TABLE emp(id int,dept_id int,name char(20),post char(20),base_sal float);
    INSERT INTO emp VALUES(1001,101,'bob','S1',5000.0);
    INSERT INTO emp VALUES(1002,101,'sam','S2',5000.0);
    INSERT INTO emp VALUES(1003,102,'tom','S3',6000.0);
    INSERT INTO emp VALUES(1004,102,'john','S4',6000.0);
    INSERT INTO emp VALUES(1001,103,'mery','S5',7000.0);
    INSERT INTO emp VALUES(1001,103,'jams','S6',7000.0);
    
    CREATE TABLE dept(id int,name char(20),addr char(20));
    INSERT INTO dept VALUES(101,'info','hangzhou');
    INSERT INTO dept VALUES(102,'tele','shanghai');
    INSERT INTO dept VALUES(103,'pers','beijing');

一、数据查询语言
1、查询表中

SELECT 字段1,字段2... FROM 表名;
    例:查询姓名与年龄
    SELECT name,age FROM Student;
    * 在SQL中也是通配符,代表所有字段

2、SQL中的数学运算 + - * /

 例:查询每个教师的日薪,按每月30天计算
    SELECT name,salary/30 FROM Teacher;
    例:查询每个教师的年薪
    SELECT name,salary*12 FROM Teacher;

3、字段别名

为查询结果新取一个字段名
    例:查询每个教师的年薪,并为查询结果设置的字段名为yearsal
    SELECT name,salary*12 yearsal FROM Teacher;

4、字符串操作

    Oracle中使用 || 连接字符串,而在MySQL它逻辑或运算。
    CONCAT(s1,s2,...)
    返回连接参数产生的字符串,一个或多个待拼接的内容,任意一个人为NULL则返回值为NULL。
    例:显示所有教师名和所教科目中间有下划线连接
    SELECT concat(name,'_',subject) FROM Teacher;

    CONCAT_WS(x,s1,s2,...)
    返回多个字符串拼接之后的字符串,每个字符串之间有一个x。
    例:连接字符串,并使用空格分隔。
    SELECT CONCAT_WS('_',name,subject,'HH') FROM Teacher;

    SUBSTRING(s,n,len)、MID(s,n,len)
    两个函数作用相同,从字符串s中返回一个第n个字符开始、长度为len的字符串。
    例:获取mage 编号
    SELECT SUBSTRING(NAME,5,1) FROM Teacher;
    SELECT MID(NAME,5,1) FROM Teacher;

    LEFT(s,n)、RIGHT(s,n)
    前者返回字符串s从最左边开始的n个字符,后者返回字符串s从最右边开始的n个字符。
    例:获取小马哥名字,不要编号
    SELECT LEFT(name,4) FROM Teacher;

    INSERT(s1,x,len,s2)
    返回字符串s1,其子字符串起始于位置x,用字符串s2取代s1的len个字符。
    "12345678" 3,2,"ABCDE"
    SELECT INSERT('12345678',3,2,'ABCDEF');

    REPLACE(s,s1,s2)
    返回一个字符串,用字符串s2替代字符串s中所有的字符串s1。
    SELECT REPLACE('12345678','345','ABC');

    LOCATE(str1,str)、POSITION(str1 IN str)、INSTR(str,str1) 三个函数作用相同,返回子字符串str1在字符串str中的开始位置
(从第几个字符开始)。
    SELECT LOCATE('123','ABCDE123DEFWE');

    FIELD(s,s1,s2,...) 返回第一个与字符串s匹配的字符串的位置。

    SELECT FIELD('123','ABC','DEF','123','ADW');

    重点:SQL语言中下标从1开始

5、排重显示

    SELECT DISTINCT 字段 FROM 表名;
    查询:学校一共开设多少科目
    SELECT DISTINCT subject FROM Teacher;

6、条件查询

    SELECT 字段 FROM 表名 WHERE 条件;
    当WHERE条件为真时显示相关数据,配合相关比较运算符。
        > < >= <= = !=
    例:查询所有教S1科目的老师
    SELECT * FROM Teacher WHERE subject = 'S1';
    例:查询所有不教S1科目的老师
    SELECT * FROM Teacher WHERE subject != 'S1';
    SELECT * FROM Teacher WHERE not subject = 'S1';
    例:查询所有年薪超过8w的老师
    SELECT name,id,salary*12 FROM Teacher WHERE salary*12>=80000;

    注意:SQL中字符串可以直接使用 比较运算符,与strcmp比较规则一致。
    SELECT * FROM Teacher WHERE name > 'mage5';

    SELECT * FROM 表名 WHERE x BETWEEN n AND m;
    显示x值 在n到m之间的数据
    例:查询月薪在6667,6688之间的教师信息
    SELECT * FROM Teacher WHERE salary BETWEEN 6667 AND 6688;
    SELECT * FROM Teacher WHERE salary>6667 AND salary<6688;

    SELECT * FROM 表名 WHERE x in(n1,n2,n3);
    显示x值在(n1,n2,n3,...)列表中的相关数据
    例:
    SELECT * FROM Teacher WHERE subject in('S1','S4','S5');

    SELECT * FROM 表名 WHERE x LIKE str;
    SQL中字符串可以进行模糊查询,str中可以使用通配符
        %代表任意多个字符 _代表一个字符
    例:查询名字mage开头的相关老师信息
    SELECT * FROM Teacher WHERE name LIKE 'mage%';
    例:查询名字以1结尾的相关老师信息
    SELECT * FROM Teacher WHERE name LIKE '%1';
    例:查询名字以ge和任意一字符结尾的相关老师信息
    SELECT * FROM Teacher WHERE name LIKE '%ge_';

    注意:在SQL中也可使用逻辑运算,AND OR NOT(&& || !不一定支持)

7、空值处理

    在SQL中空值是一种特殊数据,任何数据与空值进行计算结果为空。
    IFNULL(x,n) 如果x的值为空,则用n来替换(MySQL,Oracle使用nvl函数)。
    例:查询员工表中的年薪
    SELECT name,base_sal*IFNULL(royalty,1)*12 FROM Employee;
    例:查询有年终奖的员工
    SELECT * FROM Employee WHERE royalty IS NULL;
    例:查询有年终奖的员工
    SELECT * FROM Employee WHERE royalty IS NOT NULL;

8、排序

    是对查询结果进行排序,而不是对数据库中表的数据进行排序。
    SELECT 数据 FROM ORDER BY 字段 类型;
    默认升序,DESC 降序
    例:按基本工资进行排序
    SELECT * FROM Employee ORDER BY base_sal;
    例:按年终奖系数进行降序
    SELECT * FROM Employee ORDER BY royalty desc;
    例:基本工资为第一个排序字段,年终奖系数为第二排序字段
    SELECT * FROM Employee ORDER BY base_sal,royalty;

9、单行函数

    对表中的数据每处理一行就返回一个结果,这种函数叫单行函数。
    UPPER 小写转大写
        SELECT id,UPPER(name) FROM Employee;
    LOWER 大写转小写
        SELECT id,UPPER(name),LOWER(post) FROM Employee;
    INITCAP 首字母大写(MySQL不支持)
        SELECT id,INITCAP(name) FROM Employee;
    LENGTH 计算字符串长度
        SELECT id,LENGTH(name) FROM Employee;
    to_char 其他类型的数据转换成字符串(MySQL不支持)

10、组函数

    一次查询只得到一个结果,如果在数据进行分组的情况下,一个分组得到一个结果。
    COUNT 计数 
    例:统计101部门的员工数量
    SELECT COUNT(id) FROM emp WHERE dept_id=101;
    
    MAX 求最大值
    例:求基本工资最高值
    SELECT MAX(base_sal) FROM Employee;

    MIN 求最小值
    例:求基本工资最低值
    SELECT MIN(base_sal) FROM Employee;

    SUM 求和
    例:求基本工资总支出
    SELECT SUM(base_sal) FROM Employee;

    AVG 求平均值
    例:求员工平均工资
    SELECT AVG(base_sal) FROM Employee;

11、多表查询

    根据员工表,部门表查询出每个员工的上班地点。
    SELECT emp.name,addr FROM emp,dept WHERE dept_id=dept.id;

12、分组查询

    SELECT 组函数(字段) FROM 表名 GROUP BY 分组条件;
    例:每个部门的平均工资
    SELECT dept.name,AVG(base_sal) FROM emp,dept WHERE emp.dept_id=dept.id GROUP BY dept_id;
    
    HAVING 筛选分组后的数据
    SELECT 组函数(字段) FROM 表名 GROUP BY 分组条件 HAVING 筛选;
    例:显示部门的平均工资>6000的部门
    SELECT dept.name,AVG(base_sal) FROM emp,dept WHERE emp.dept_id=dept.id GROUP BY dept_id HAVING AVG(base_sal) > 6000;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Love丶伊卡洛斯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值