跟晓月一起练: MySQL常用SQL语句查询及数据库表的操作

前言

mysql的学习,多练习才是最重要的。

关注我的云原生社区:云原生社区
关注我的英语社区:从零开始学英语

文章目录

  • 前言
  • 一. 电商网站的数据库练习
    • 1.1 电商网站常见模块
    • 1.2 用户模块 分类
    • 1.3 创建用户表并插入数据
    • 1.4 创建购物车的数据库表并插入数据
    • 1.5 查询语句
  • 二. 数据库查询实战
    • 2.1 创建数据库
    • 2.2 插入数据
    • 2.3 实现如下题目
  • 三. 练习时间
  • 总结

一. 电商网站的数据库练习

1.1 电商网站常见模块

一个电商网站通常由多个模块组成,每个模块负责不同的功能和任务。常见模块如下:

  1. 用户模块:处理用户注册、登录、个人资料管理等功能,确保用户的身份验证和信息安全。
  2. 商品模块:管理商品的发布、展示、搜索和分类,包括商品的详细信息、价格、库存等。
  3. 购物车模块:实现用户将商品添加到购物车、调整商品数量、结算等功能,方便用户管理购买行为。
  4. 订单模块:处理用户下单、生成订单、支付订单、查看订单状态等功能,确保购买过程的顺利进行。
  5. 支付模块:与第三方支付服务集成,实现支付过程的安全处理和支付状态的确认。
  6. 物流模块:管理订单的配送和物流信息,包括生成运单、跟踪物流状态、提供物流查询等功能。
  7. 评价模块:允许用户对购买的商品进行评价和评论,同时提供评分和展示评价的功能。
  8. 优惠券模块:管理优惠券的发布、领取和使用,提供用户优惠和促销活动。 客服模块:提供在线客服和用户支持功能,包括咨询、投诉、售后等服务。
  9. 数据分析模块:收集和分析用户行为数据、销售数据等,用于业务决策、推荐系统和个性化服务。
  10. 后台管理模块:用于管理员管理电商网站的功能,包括商品管理、订单管理、用户管理、运营活动管理等。
  11. 广告模块:管理网站的广告位,包括广告发布、投放和效果统计等。
  12. 会员模块:管理会员等级、积分体系、会员权益、会员卡等,提供个性化的会员服务和特权。
  13. 安全模块:处理用户密码加密和账户安全,防范恶意攻击、欺诈行为和数据泄漏等。
  14. 社交分享模块:允许用户分享商品信息和购买体验到社交媒体平台,增加商品曝光和推广。
  15. 推荐模块:根据用户的历史购买、浏览行为等信息,提供个性化的商品推荐和推荐算法优化。
  16. 多语言与国际化模块:支持多语言界面和翻译,适应国际市场和不同地区的用户需求。
  17. 秒杀/团购模块:提供限时秒杀和团购活动,促进交易活跃度和用户参与度。
  18. 供应链管理模块:管理供应商和库存,确保商品供应的稳定性和及时性。
  19. 数据备份与恢复模块:定期进行数据库备份,以防止数据丢失,同时提供数据恢复的能力。
  20. 移动端应用模块:为移动设备提供相应的应用程序,提供优化的移动购物体验。
  21. 积分商城模块:允许用户使用积分兑换商品或优惠券,增强用户忠诚度和参与度。
  22. 电子发票模块:提供电子发票的生成、发送和管理,方便用户进行购物凭证的记录。

1.2 用户模块 分类

以用户模块为例,创建一个名为"User"的数据库表 ,可能包含:

  • UserID(用户ID):唯一标识用户的ID。
  • Username(用户名):用户的登录名或昵称。
  • Password(密码):加密后的用户密码。
  • Email(电子邮件):用户的电子邮件地址。
  • Phone(电话号码):用户的联系电话号码。
  • FirstName(名):用户的名字。
  • LastName(姓):用户的姓氏。
  • Address(地址):用户的邮寄地址或常用地址。
  • City(城市):用户所在的城市。
  • PostalCode(邮政编码):用户所在地区的邮政编码。
  • Country(国家):用户所在的国家。
  • Gender(性别):用户的性别,可能取值为男、女或不可用。
  • Birthdate(出生日期):用户的出生日期。
  • Avatar(头像):用户上传或选择的个人头像图片的URL。
  • RegistrationDate(注册日期):用户的注册日期和时间。
  • LastLoginDate(最后登录日期):用户最后一次登录的日期和时间。
  • IsActive(是否激活):标识用户账号是否处于激活状态。
  • IsAdmin(是否管理员):标识用户是否是管理员账号,决定用户的权限和访问级别。

1.3 创建用户表并插入数据

MySQL [(none)]> create database store;
Query OK, 1 row affected (0.00 sec)

MySQL [(none)]> use store

CREATE TABLE User (
  UserID INT PRIMARY KEY,
  Username VARCHAR(50) NOT NULL,
  Password VARCHAR(100) NOT NULL,
  Email VARCHAR(100) NOT NULL,
  Phone VARCHAR(20),
  FirstName VARCHAR(50),
  LastName VARCHAR(50),
  Address VARCHAR(100),
  City VARCHAR(50),
  PostalCode VARCHAR(20),
  Country VARCHAR(50),
  Gender ENUM('Male', 'Female', 'Not available'),
  Birthdate DATE,
  Avatar VARCHAR(200),
  RegistrationDate DATETIME,
  LastLoginDate DATETIME,
  IsActive BOOLEAN,
  IsAdmin BOOLEAN
);
INSERT INTO User (UserID, Username, Password, Email, Phone, FirstName, LastName, Address, City, PostalCode, Country, Gender, Birthdate, Avatar, RegistrationDate, LastLoginDate, IsActive, IsAdmin)
VALUES
(1, 'johnsmith', 'password123', '[email protected]', '1234567890', 'John', 'Smith', '123 Main St', 'New York', '10001', 'USA', 'Male', '1990-01-01', 'https://example.com/avatar1.jpg', '2023-06-01 10:00:00', '2023-06-02 15:00:00', 1, 0),
(2, 'janedoe', 'password456', '[email protected]', '0987654321', 'Jane', 'Doe', '456 Elm St', 'Los Angeles', '90001', 'USA', 'Female', '1995-03-15', 'https://example.com/avatar2.jpg', '2023-06-03 12:00:00', '2023-06-05 09:30:00', 1, 0),
(3, 'mikebrown', 'password789', '[email protected]', '9876543210', 'Mike', 'Brown', '789 Oak St', 'Chicago', '60601', 'USA', 'Male', '1988-07-10', 'https://example.com/avatar3.jpg', '2023-06-08 09:00:00', '2023-06-09 16:45:00', 1, 1),
(4, 'sarahwilson', 'passwordabc', '[email protected]', '0123456789', 'Sarah', 'Wilson', '987 Pine St', 'San Francisco', '94101', 'USA', 'Female', '1992-12-25', 'https://example.com/avatar4.jpg', '2023-06-10 14:30:00', '2023-06-12 11:20:00', 1, 0);
MySQL [store]> select UserID,FirstName,LastName from User;
+--------+-----------+----------+
| UserID | FirstName | LastName |
+--------+-----------+----------+
|      1 | John      | Smith    |
|      2 | Jane      | Doe      |
|      3 | Mike      | Brown    |
|      4 | Sarah     | Wilson   |
+--------+-----------+----------+
4 rows in set (0.00 sec)

1.4 创建购物车的数据库表并插入数据

CREATE TABLE ShoppingCart (
  CartID INT PRIMARY KEY AUTO_INCREMENT,
  UserID INT NOT NULL,
  ProductID INT NOT NULL,
  Quantity INT NOT NULL,
  Price DECIMAL(10, 2) NOT NULL,
  CreatedAt DATETIME
);
  1. UserID(用户ID):购物车所属用户的ID。
  2. ProductID(商品ID):购物车中商品的ID。
  3. Quantity(数量):购物车中该商品的数量。
  4. Price(价格):购物车中该商品的价格。
  5. CreatedAt(创建时间):购物车中商品的添加时间。
INSERT INTO ShoppingCart (UserID, ProductID, Quantity, Price, CreatedAt)
VALUES
(1, 1001, 2, 39.99, '2023-06-15 10:00:00'),
(2, 1002, 1, 19.99, '2023-06-15 10:30:00'),
(3, 1001, 3, 39.99, '2023-06-15 11:00:00'),
(4, 1003, 1, 49.99, '2023-06-15 12:00:00');
MySQL [store]> select * from ShoppingCart;
+--------+--------+-----------+----------+-------+---------------------+
| CartID | UserID | ProductID | Quantity | Price | CreatedAt           |
+--------+--------+-----------+----------+-------+---------------------+
|      1 |      1 |      1001 |        2 | 39.99 | 2023-06-15 10:00:00 |
|      2 |      2 |      1002 |        1 | 19.99 | 2023-06-15 10:30:00 |
|      3 |      3 |      1001 |        3 | 39.99 | 2023-06-15 11:00:00 |
|      4 |      4 |      1003 |        1 | 49.99 | 2023-06-15 12:00:00 |
+--------+--------+-----------+----------+-------+---------------------+
4 rows in set (0.00 sec)


1.5 查询语句

  1. 向User表中插入了一条用户信息,用户名为"mufenggrow"。
INSERT INTO User (UserID, Username, Password, Email, Phone, FirstName, LastName, Address, City, PostalCode, Country, Gender, Birthdate, Avatar, RegistrationDate, LastLoginDate, IsActive, IsAdmin)
VALUES
(5, 'mufenggrow', 'password123', '[email protected]', '1234567890', 'Mufeng', 'Grow', '456 Maple St', 'London', 'SW1A 1AA', 'UK', 'Male', '1990-05-20', 'https://example.com/avatar5.jpg', '2023-06-18 09:00:00', '2023-06-18 09:00:00', 1, 0);

二. 数据库查询实战

2.1 创建数据库

drop table if exists students;
create table students (
  studentNo varchar(10) primary key,
  name varchar(10),
  sex varchar(1),
  hometown varchar(20),
  age tinyint(4),
  class varchar(10),
  card varchar(20)
)

2.2 插入数据

insert into students values
('001', '王昭君', '女', '北京', '20', '1班', '340322199001247654'),
('002', '诸葛亮', '男', '上海', '18', '2班', '340322199002242354'),
('003', '张飞', '男', '南京', '24', '3班', '340322199003247654'),
('004', '白起', '男', '安徽', '22', '4班', '340322199005247654'),
('005', '大乔', '女', '天津', '19', '3班', '340322199004247654'),
('006', '孙尚香', '女', '河北', '18', '1班', '340322199006247654'),
('007', '百里玄策', '男', '山西', '20', '2班', '340322199007247654'),
('008', '小乔', '女', '河南', '15', '3班', null),
('009', '百里守约', '男', '湖南', '21', '1班', ''),
('010', '妲己', '女', '广东', '26', '2班', '340322199607247654'),
('011', '李白', '男', '北京', '30', '4班', '340322199005267754'),
('012', '孙膑', '男', '新疆', '26', '3班', '340322199000297655')

2.3 实现如下题目

  1. 查询小乔的年龄
  2. 查询20岁以下的学生
  3. 查询家乡不在北京的学生
  4. 查询学号为007的学生身份证号
  5. 查询1班的上海的学生
  6. 查询姓孙的学神
  7. 查询非20岁的学生
  8. 查询所有学生信息,年龄从小到大排序
  9. 查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序
4 创建表,插入数据
[root@leaner mysql001]# mysql -pSmile-123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| aa                 |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
6 rows in set (0.01 sec)

mysql> use test;
Database changed
mysql> create table students(studentNo varchar(5),name varchar(30),sex varchar(5), hometown varchar(100), age int, class varchar(10), card varchar(30));
mysql> insert into students values('001', '王昭君', '女', '北京', 20, '1班', '340322199001247654'), 
('002', '诸葛亮', '男', '上海', 18, '2班', '340322199002242354'), 
('003', '张飞', '男', '南京', 24, '3班', '340322199003247654'), 
('004', '白起', '男', '安徽', 22, '4班', '340322199005247654'),
('005', '大乔', '女', '天津', 19, '3班', '340322199004247654'), 
('006', '孙尚香', '女', '河北', 18, '1班', '340322199006247654'), ('007', '百里玄策', '男', '山西', 20, '2班', '340322199007247654'), 
('008', '小乔', '女', '河南', 15, '3班', null), 
('009', '百里守约', '男', '湖南', 21, '1班', ''), 
('010', '妲己', '女', '广东', 26, '2班', '340322199607247654'), 
('011', '李白', '男', '北京', 30, '4班', '340322199005267754'),
('012', '孙膑', '男', '新疆', 26, '3班', '340322199000297655');
mysql> select * from students;
+-----------+--------------+------+----------+------+-------+--------------------+
| studentNo | name         | sex  | hometown | age  | class | card               |
+-----------+--------------+------+----------+------+-------+--------------------+
| 001       | 王昭君       || 北京     |   20 | 1| 340322199001247654 |
| 002       | 诸葛亮       || 上海     |   18 | 2| 340322199002242354 |
| 003       | 张飞         || 南京     |   24 | 3| 340322199003247654 |
| 004       | 白起         || 安徽     |   22 | 4| 340322199005247654 |
| 005       | 大乔         || 天津     |   19 | 3| 340322199004247654 |
| 006       | 孙尚香       || 河北     |   18 | 1| 340322199006247654 |
| 007       | 百里玄策     || 山西     |   20 | 2| 340322199007247654 |
| 008       | 小乔         || 河南     |   15 | 3| NULL               |
| 009       | 百里守约     || 湖南     |   21 | 1|                    |
| 010       | 妲己         || 广东     |   26 | 2| 340322199607247654 |
| 011       | 李白         || 北京     |   30 | 4| 340322199005267754 |
| 012       | 孙膑         || 新疆     |   26 | 3| 340322199000297655 |
+-----------+--------------+------+----------+------+-------+--------------------+
12 rows in set (0.00 sec)

mysql>
 题目:
# 查询小乔的年龄
mysql> select name,age from students where name="小乔";
+--------+------+
| name   | age  |
+--------+------+
| 小乔   |   15 |
+--------+------+
1 row in set (0.00 sec)
# 查询20岁以下的学生
mysql> select * from students where age < 20;
+-----------+-----------+------+----------+------+-------+--------------------+
| studentNo | name      | sex  | hometown | age  | class | card               |
+-----------+-----------+------+----------+------+-------+--------------------+
| 002       | 诸葛亮    || 上海     |   18 | 2| 340322199002242354 |
| 005       | 大乔      || 天津     |   19 | 3| 340322199004247654 |
| 006       | 孙尚香    || 河北     |   18 | 1| 340322199006247654 |
| 008       | 小乔      || 河南     |   15 | 3| NULL               |
+-----------+-----------+------+----------+------+-------+--------------------+
4 rows in set (0.00 sec)
 
# 查询家乡不在北京的学生
mysql> select * from students where hometown <> "北京";
+-----------+--------------+------+----------+------+-------+--------------------+
| studentNo | name         | sex  | hometown | age  | class | card               |
+-----------+--------------+------+----------+------+-------+--------------------+
| 002       | 诸葛亮       || 上海     |   18 | 2| 340322199002242354 |
| 003       | 张飞         || 南京     |   24 | 3| 340322199003247654 |
| 004       | 白起         || 安徽     |   22 | 4| 340322199005247654 |
| 005       | 大乔         || 天津     |   19 | 3| 340322199004247654 |
| 006       | 孙尚香       || 河北     |   18 | 1| 340322199006247654 |
| 007       | 百里玄策     || 山西     |   20 | 2| 340322199007247654 |
| 008       | 小乔         || 河南     |   15 | 3| NULL               |
| 009       | 百里守约     || 湖南     |   21 | 1|                    |
| 010       | 妲己         || 广东     |   26 | 2| 340322199607247654 |
| 012       | 孙膑         || 新疆     |   26 | 3| 340322199000297655 |
+-----------+--------------+------+----------+------+-------+--------------------+
10 rows in set (0.00 sec)

# 查询学号为007的学生身份证号
mysql> select studentNo,card from students where studentNo = '007';
+-----------+--------------------+
| studentNo | card               |
+-----------+--------------------+
| 007       | 340322199007247654 |
+-----------+--------------------+
1 row in set (0.00 sec)

# 查询1班的上海的学生
mysql> select * from students where hometown = "北京" and class="1班";
+-----------+-----------+------+----------+------+-------+--------------------+
| studentNo | name      | sex  | hometown | age  | class | card               |
+-----------+-----------+------+----------+------+-------+--------------------+
| 001       | 王昭君    || 北京     |   20 | 1| 340322199001247654 |
+-----------+-----------+------+----------+------+-------+--------------------+
1 row in set (0.00 sec)

# 查询姓孙的学生
mysql> select * from students where name like '孙%';
+-----------+-----------+------+----------+------+-------+--------------------+
| studentNo | name      | sex  | hometown | age  | class | card               |
+-----------+-----------+------+----------+------+-------+--------------------+
| 006       | 孙尚香    || 河北     |   18 | 1| 340322199006247654 |
| 012       | 孙膑      || 新疆     |   26 | 3| 340322199000297655 |
+-----------+-----------+------+----------+------+-------+--------------------+
2 rows in set (0.00 sec)

# 查询非20岁的学生
mysql> select * from students where age <> 20;
+-----------+--------------+------+----------+------+-------+--------------------+
| studentNo | name         | sex  | hometown | age  | class | card               |
+-----------+--------------+------+----------+------+-------+--------------------+
| 002       | 诸葛亮       || 上海     |   18 | 2| 340322199002242354 |
| 003       | 张飞         || 南京     |   24 | 3| 340322199003247654 |
| 004       | 白起         || 安徽     |   22 | 4| 340322199005247654 |
| 005       | 大乔         || 天津     |   19 | 3| 340322199004247654 |
| 006       | 孙尚香       || 河北     |   18 | 1| 340322199006247654 |
| 008       | 小乔         || 河南     |   15 | 3| NULL               |
| 009       | 百里守约     || 湖南     |   21 | 1|                    |
| 010       | 妲己         || 广东     |   26 | 2| 340322199607247654 |
| 011       | 李白         || 北京     |   30 | 4| 340322199005267754 |
| 012       | 孙膑         || 新疆     |   26 | 3| 340322199000297655 |
+-----------+--------------+------+----------+------+-------+--------------------+
10 rows in set (0.00 sec)

# 查询所有学生信息,年龄从小到大排序

mysql> select * from students order by age;
+-----------+--------------+------+----------+------+-------+--------------------+
| studentNo | name         | sex  | hometown | age  | class | card               |
+-----------+--------------+------+----------+------+-------+--------------------+
| 008       | 小乔         || 河南     |   15 | 3| NULL               |
| 002       | 诸葛亮       || 上海     |   18 | 2| 340322199002242354 |
| 006       | 孙尚香       || 河北     |   18 | 1| 340322199006247654 |
| 005       | 大乔         || 天津     |   19 | 3| 340322199004247654 |
| 001       | 王昭君       || 北京     |   20 | 1| 340322199001247654 |
| 007       | 百里玄策     || 山西     |   20 | 2| 340322199007247654 |
| 009       | 百里守约     || 湖南     |   21 | 1|                    |
| 004       | 白起         || 安徽     |   22 | 4| 340322199005247654 |
| 003       | 张飞         || 南京     |   24 | 3| 340322199003247654 |
| 010       | 妲己         || 广东     |   26 | 2| 340322199607247654 |
| 012       | 孙膑         || 新疆     |   26 | 3| 340322199000297655 |
| 011       | 李白         || 北京     |   30 | 4| 340322199005267754 |
+-----------+--------------+------+----------+------+-------+--------------------+
12 rows in set (0.00 sec)

# 查询所有学生信息,按年龄从大到小排序,年龄相同时,再按学号从小到大排序
mysql> select * from students order by age desc,studentNo;
+-----------+--------------+------+----------+------+-------+--------------------+
| studentNo | name         | sex  | hometown | age  | class | card               |
+-----------+--------------+------+----------+------+-------+--------------------+
| 011       | 李白         || 北京     |   30 | 4| 340322199005267754 |
| 010       | 妲己         || 广东     |   26 | 2| 340322199607247654 |
| 012       | 孙膑         || 新疆     |   26 | 3| 340322199000297655 |
| 003       | 张飞         || 南京     |   24 | 3| 340322199003247654 |
| 004       | 白起         || 安徽     |   22 | 4| 340322199005247654 |
| 009       | 百里守约     || 湖南     |   21 | 1|                    |
| 001       | 王昭君       || 北京     |   20 | 1| 340322199001247654 |
| 007       | 百里玄策     || 山西     |   20 | 2| 340322199007247654 |
| 005       | 大乔         || 天津     |   19 | 3| 340322199004247654 |
| 002       | 诸葛亮       || 上海     |   18 | 2| 340322199002242354 |
| 006       | 孙尚香       || 河北     |   18 | 1| 340322199006247654 |
| 008       | 小乔         || 河南     |   15 | 3| NULL               |
+-----------+--------------+------+----------+------+-------+--------------------+
12 rows in set (0.00 s

三. 练习时间

接下来到你了,给你几个题目,参考本文的内容写出答案哦

  1. 查询年龄最大的学生的信息
  2. 查询性别为女性的学生数量
  3. 查询每个班级的学生数量
  4. 查询没有身份证号的学生信息

总结

SQL语句不难,就是写起来比较麻烦,看到这里了,练习做了吗。在评论区写下你的答案哦。

你可能感兴趣的:(#,5,-,数据库入门到精通篇,数据库,mysql,运维)