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;