上一遍文章内容
MYSQL数据表的检索
1.查询时选择列
好的,首先,让我们创建一个名为Students
的新表:
CREATE TABLE Students (
id INT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(255),
major VARCHAR(100),
score int,
phone_number VARCHAR(20),
entry_year INT,
salary DECIMAL(10, 2)
);
现在,我们已经创建了一个包含id
(主键)、name
、email
和major
字段的Students
表。
接下来,我们可以向该表中插入一些记录:
INSERT INTO Students (id, name, email, major, score, phone_number, entry_year, salary)
VALUES
(1, '朱晓明', 'zxming@student.edu.cn', '计算机科学与技术', 88, '13900111222', 2019, 12000.00),
(2, '刘洋', 'liuyang@example.com', '电子信息工程', 92, '13822223333', 2020, 9800.00),
(3, '陈静', 'chenjing@example.edu', '工商管理', 85, '13733334444', 2018, 10500.00),
(4, '杨辉', 'yanghui@student.university.edu.cn', '软件工程', 90, '13644445555', 2017, 11000.00),
(5, '马丽', 'mali@example.com', '英语语言文学', 89, '13555556666', 2021, 8500.00),
(6, '何勇', 'heyong@example.net', '机械设计制造及其自动化', 87, '13466667777', 2016, 13000.00),
(7, '宋佳', 'songjia@example.org', '临床医学', 91, '13377778888', 2022, 10000.00),
(8, '罗敏', 'luomin@alumni.edu.cn', '通信工程', 86, '13288889999', 2015, 12500.00),
(9, '唐薇', 'tangwei@university.edu', '会计学', 93, '13199990000', 2020, 9500.00),
(10, '曹雷', 'caolei@example.com', '土木工程', 84, '13000001111', 2019, 11500.00);
然后,如果我们想要查询并按照email
, name
, major
的顺序显示学生信息,可以这样写查询:
SELECT email, name, major FROM Students;
这样,你将得到所有学生的信息,并且结果列的顺序将是电子邮件、姓名和专业。
2.条件查询(WHERE)
好的,假设我们想要查询Students
表中所有电子邮件地址包含"@example.com"并且专业为"计算机科学"的学生的姓名和邮箱:
SELECT name, email FROM Students WHERE email LIKE '%@example.com' AND major = '计算机科学';
在这个查询中,LIKE '%@example.com'
用于筛选出电子邮件地址中含有"@example.com"的记录,
而AND major = '计算机科学'
则是进一步筛选出专业为"计算机科学"的学生。
最终返回的结果集将只包含满足这两个条件的学生的姓名和电子邮件地址。
简单实例 下面字段根据自己表的属性进行修改练习,没有可以新增
1. 等于条件:
SELECT * FROM users WHERE username = 'test';
2. 不等于条件:
SELECT * FROM users WHERE username != 'runoob';
3. 大于条件:
SELECT * FROM products WHERE price > 50.00;
4. 小于条件:
SELECT * FROM orders WHERE order_date < '2023-01-01';
5. 大于等于条件:
SELECT * FROM employees WHERE salary >= 50000;
6. 小于等于条件:
SELECT * FROM students WHERE age <= 21;
7. 组合条件(AND、OR):
SELECT * FROM students WHERE category = 'Electronics' AND price > 100.00;
SELECT * FROM students WHERE order_date >= '2023-01-01' OR total_amount > 1000.00;
8. 模糊匹配条件(LIKE):
select * from students where name like "%敏";
9. IN 条件:
select * from students where major in ("工商管理","软件工程","会计学");
10. NOT 条件:
SELECT * FROM students WHERE NOT major = '工商管理';
11. BETWEEN 条件:
SELECT * FROM students WHERE entry_year BETWEEN '2019' AND '2025';
12. IS NULL 条件
SELECT * FROM students WHERE major IS NULL;
13. IS NOT NULL 条件:
SELECT * FROM students WHERE major IS NOT NULL;
排序order by
分组查询(GROUP BY)
假设我们想在Students
表中按照专业(major)分组,统计每个专业的学生人数:
SELECT major, COUNT(*) as student_count FROM Students GROUP BY major;
在这个查询中,GROUP BY major
表示将结果集按照major
字段的值进行分组。
COUNT(*)
函数用于计算每个分组内的记录数,并将其命名为student_count
。最终返回的结果将是一个包含每个专业及其对应学生人数的列表。
显示数据限制(LIMIT)
假设我们想从Students
表中获取专业为“计算机科学”的前3名学生的信息(按照id升序排列):
SELECT * FROM Students WHERE major = '计算机科学' ORDER BY id ASC LIMIT 3;
在这个查询中,WHERE major = '计算机科学'
用于筛选出专业为"计算机科学"的学生。
ORDER BY id ASC
表示将结果集按照id字段的值进行升序排序,倒序用DESC
。LIMIT 3
则限制返回的结果数量仅为前三条记录。
因此,这个查询将返回id最小的前三名"计算机科学"专业的学生的所有信息。
练习
1.查询入学时间的统计数量情况,比如2019多少个等。
2.查询工资从高到低的排序情况。
3.查询学生成绩前5的学生信息。
作业
1.查询所有计算机科学专业学生的姓名和邮箱,并按分数降序排序
2.查找工资高于9000的所有专业的学生人数,按专业分组
3.显示名字以"唐"开头,且电话号码包含数字"5"的学生的姓名、电话号码和专业,结果按姓名升序排序
4.显示所有专业为“会计学”或“土木学”的学生姓名和他们的入学年份,按入学年份升序排序
5.显示所有分数不低于80分,且电话号码以数字"1"开头的学生的姓名、分数和电话号码,结果先按分数降序,分数相同情况下按电话号码升序排序
Sql
直接删除原来表的数据
再插入一些数据
当然,假设我们有一个Students
表,并且想要一次性插入多行数据,可以使用如下格式的INSERT INTO
语句:
INSERT INTO Students (id, name, email, major)
VALUES
(1, '张三', 'zhangsan@example.com', '计算机科学'),
(2, '李四', 'lisi@example.com', '数学与应用数学'),
(3, '王五', 'wangwu@example.com', '物理学'),
(4, '赵六', 'zhaoliu@example.com', '电子工程'),
(5, '孙七', 'sunqi@example.com', '化学'),
(6, '周八', 'zhouba@example.com', '生物科学'),
(7, '吴九', 'wujiu@example.com', '经济学'),
(8, '郑十', 'zhengshi@example.com', '法学'),
(9, '钱十一', 'qian_shiyi@example.com', '环境科学'),
(10, '孙十二', 'sun_shier@example.com', '艺术设计');
这样就一次性向Students
表中插入了多条记录。每个(value1, value2, value3, value4......)
是一个完整的记录,每组值之间用逗号分隔,不同的记录之间也用逗号分隔。
练习
1.使用(*)通配符查询students表中,所有学生的信息
2.使用指定所有字段名称查询students表中所有学生的信息
3.查询students中所有学生的姓名
4.查询students中学生的姓名、邮箱、专业。
5.查看表中最后添加的5条学生记录
答案在下面,做完再看
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
1.
SELECT * FROM Students;
2.
SELECT id, name, email, major FROM Students;
3.
SELECT name FROM students;
4.
SELECT name, email, major FROM Students;
5.
SELECT * FROM students ORDER BY id DESC LIMIT 5;
``` 掌握练习题 1.等于条件:找出名字为“张伟”的学生的所有信息。
2.不等于条件:找出专业不是“计算机科学与技术”的所有学生信息。
3.大于条件:找出分数超过90分的所有学生信息。
4.小于条件:找出入学年份在2018年之前(假设有一个entry_year字段未提及)的所有学生信息。
5.大于等于条件:找出薪水不低于5000元的学生信息(假设有一个salary字段未提及,这里仅作为示例)。
6.小于等于条件:找出成绩不超过90分的所有学生信息。
7.组合条件(AND):找出专业为“软件工程”且分数超过85分的所有学生信息。
8.组合条件(OR):找出邮箱以.edu结尾或电话号码以138开头的所有学生信息。
9.模糊匹配条件(LIKE):找出名字以“李”字开头的所有学生信息。
10.IN 条件:找出专业属于“计算机科学与技术”、“软件工程”或“电子工程”的所有学生信息。
11.NOT 条件:找出专业不是“软件工程”的所有学生信息。
12.BETWEEN 条件:找出分数在80到90之间(包括两端)的所有学生信息。
13.IS NULL 条件:找出没有填写邮箱的所有学生信息。
14.IS NOT NULL 条件:找出已经提供了电话号码的所有学生信息。
作业
先插入一条名字叫张三的学生信息,其他属性为null
题目1:
描述: 查询名字恰好为“杨辉”且分数等于90分的学生信息。
题目2:
描述: 找出那些专业不是“软件工程”且薪水大于10000元的学生信息。
题目3:
描述: 检索分数大于85分,且入学年份早于2018年的所有学生记录。
题目4:
描述: 查找邮箱地址不以“.edu”结尾,或者电话号码不是以138开头的所有学生信息
题目5:
描述: 查询专业名字中含有“工”字的专业信息。
题目6:
描述: 找出那些没有填写邮箱地址,但专业不是“艺术设计”且分数小于等于85分的所有学生信息。
题目7:
描述:查询出邮箱以“.com”结尾且分数大于85分的所有学生信息。