多表查询(运算符)

CREATE TABLE emp(
    empno   INT PRIMARY KEY auto_increment,
    ename   VARCHAR(20),
    job VARCHAR(20),
    mgr VARCHAR(20),    
    hiredate    date,
    sal DECIMAL(7,2),
    COMM    DECIMAL(7,2),   
    deptno INT
);
INSERT INTO emp VALUES(NULL,'张三','销售总监','客户经理',NULL,53534.99,999.9,2);
​​-- 学生表
create table students(
id INT PRIMARY KEY AUTO_INCREMENT,-- 主键且自增长
sname varchar(15), -- 姓名
gender varchar(2), -- 性别
age int,       -- 年龄
hometown varchar(80)  -- 住址
);
-- 插入数据
INSERT INTO students VALUES (NULL,'杨过','男',28,'绝情谷');
INSERT INTO students VALUES (NULL,'小龙女','女',28,'绝情谷');
INSERT INTO students VALUES (NULL,'郭靖','男',38,'襄阳');
INSERT INTO students VALUES (NULL,'黄蓉','女',28,'襄阳');
INSERT INTO students VALUES (NULL,'金轮法王','男',38,'吐蕃');
​-- 比较运算符
-- 等于=
-- 大于>
-- 大于等于>=
-- 小于<
-- 小于等于<=
-- 不等于!=或<>
​-- 查询编号大于3的学生
#SELECT * FROM 表名 WHERE 字段 比较运算符 值;
SELECT * FROM students WHERE id>3;
​-- 查询编号不大于4的学生
SELECT * FROM students WHERE id<=4;
-- 查询姓名不是“黄蓉”的学生
SELECT * FROM students WHERE sname!='黄蓉';
​-- 逻辑运算符   and  、 or  
-- AND 和
-- OR 只满足一项即可
​-- 查询编号大于3的女同学
SELECT * FROM students WHERE id>3 AND gender='女';
-- 查询编号小于4或者为性别为男的学生
SELECT * FROM students WHERE id<4 OR gender='男';
​-- 模糊查询
-- like
-- %表示任意多个任意字符
-- _表示一个任意字符
-- 查询小开头的三个字姓名
SELECT * FROM students WHERE sname LIKE '小__';
​-- 查询名字里面有法的同学
SELECT * FROM students WHERE sname LIKE '%法%';​
-- 1查询姓黄并且名字是一个字的学生
​-- 2查询姓黄或叫靖的学生
SELECT * FROM students WHERE sname LIKE '黄%' OR sname LIKE '%靖';
​-- 范围查询
-- in表示在一个非连续的范围内,里面可以添加多个条件值
-- between 值1 and 值2 表示在一个连续的范围内    值1<= x  <=值2
-- 查询id是1,3,4的学生姓名和id
SELECT sname,id FROM students WHERE id IN(1,3,4);
​-- 查询id3-5之间的学生信息
SELECT * FROM students WHERE id BETWEEN 3 AND 5;
​-- 查询id3-5之间的学生信息(使用逻辑运算符)
SELECT * FROM students WHERE id=3 OR id=4 OR id=5;
-- 使用>=3   <=5
SELECT * FROM students WHERE id>=3 AND id<=5;
UPDATE students SET hometown =NULL WHERE id=6;
-- null与 not null 是不同的
#IS NULL(为空)
#IS NOT NULL(不为空)
-- 查询没有填写地址的学生
SELECT * FROM students WHERE hometown IS NULL;​
-- 查询地址不为空的学生信息
SELECT * FROM students WHERE hometown IS NOT NULL;​
-- 子查询:把查询结果作为条件,然后继续查询
-- 查询id为最大的学生​
SELECT * FROM students WHERE id =(SELECT MAX(id) FROM students);​
-- 分组(GROUP BY 字段) ,分组过滤(having 条件),排序(ORDER BY 字段 ASC升序、DESC降序)
-- 查询id编号小于10,以住址为分组且年龄大于30,将结果升序排列
#使用分组的时候,分组字段一般在查询字段里面也有
SELECT  hometown,age FROM students WHERE id<10 GROUP BY hometown,age HAVING age >30 ORDER BY age ASC;
​-- 否有姓名重名(hometown)次数的数据?
SELECT hometown,COUNT(hometown) FROM students GROUP BY hometown;
-- 统计不同家乡的数量
SELECT COUNT(DISTINCT hometown) FROM students;
create table exam(
        id int primary key auto_increment,
        name varchar(20) not null,
        chinese double,
        math double,
        english double
    );
    insert into exam values(null,'关羽',85,76,70);
    insert into exam values(null,'张飞',70,75,70);
    insert into exam values(null,'赵云',90,65,95);
    insert into exam values(null,'刘备',97,50,50);
    insert into exam values(null,'曹操',90,89,80);
    insert into exam values(null,'司马懿',90,67,65);
-- 1.查询姓名为刘备的学生成绩
SELECT * FROM exam WHERE name='刘备';
-- 2.查询英语分数在 80-90之间的同学
SELECT * FROM exam WHERE english BETWEEN 80 AND 90;
-- 3.查询所有姓刘的学生成绩
SELECT * FROM exam WHERE name LIKE '刘%';
-- 4.查询数学分>80并且语文分>80的同学
SELECT * FROM exam WHERE math>80 AND chinese >80;
-- 5.对数学成绩排序后输出
SELECT math FROM exam ORDER BY math;
-- 6.对姓刘的学生成绩排序(语文)输出
SELECT name,math,chinese,english FROM exam ORDER BY math DESC,chinese DESC,english;
-- 7.统计数学成绩大于或等于90的学生有多少个
SELECT COUNT(*) FROM exam WHERE math>90 OR math=90;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

施田雨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值