MySQL的sql练习,适合初学者

发布于:2024-11-02 ⋅ 阅读:(47) ⋅ 点赞:(0)

通过两张表,emp,dept 来演示mysql的sql语句
dept表

CREATE TABLE dept (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);

emp表

CREATE TABLE emp (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL,
    age INT,
    sex VARCHAR(10),
    phone VARCHAR(20),
    deptId INT,
    CONSTRAINT fk_deptId FOREIGN KEY (deptId) REFERENCES dept(id)
);

这个emp表包含六个字段:id、name、age、sex、phone和deptId。id字段是主键,并且会自动递增,name字段用于存储员工的姓名,不允许为空。age字段用于存储员工的年龄,sex字段用于存储员工的性别,phone字段用于存储员工的电话号码。deptId字段是一个外键,它引用了dept表的id字段,表示员工所属的部门。
以上SQL语句定义了两个表的结构,并且通过外键deptId将emp表和dept表关联起来。

sql练习

单表查询

SELECT * FROM emp;	查询emp表中的所有记录。
SELECT id, name FROM emp;	查询emp表中的id和name字段。
SELECT COUNT(*) FROM emp;	查询emp表中的记录总数。

条件查询

SELECT * FROM emp WHERE age > 30;	查询emp表中年龄大于30岁的所有记录。
SELECT * FROM emp WHERE sex = '男' AND deptId = 1;	查询emp表中性别为男且部门id为1的所有记录。

排序

SELECT * FROM emp ORDER BY age DESC;	查询emp表中的所有记录,并按年龄降序排列。

分组

SELECT deptId, COUNT(*) FROM emp GROUP BY deptId;	按部门分组,查询每个部门的员工数量。

聚合函数

SELECT MAX(age), MIN(age), AVG(age) FROM emp;	查询emp表中年龄的最大值、最小值和平均值。

多表查询

SELECT emp.*, dept.name FROM emp JOIN dept ON emp.deptId = dept.id;	连接emp表和dept表,查询员工信息及其部门名称。
SELECT emp.name, dept.name FROM emp JOIN dept ON emp.deptId = dept.id WHERE emp.age > 30;	连接emp表和dept表,查询年龄大于30岁的员工及其部门名称。

子查询

SELECT * FROM emp WHERE deptId = (SELECT id FROM dept WHERE name = '销售部');	查询部门名称为“销售部”的员工信息。

插入

INSERT INTO emp (name, age, sex, phone, deptId) VALUES ('张三', 25, '男', '1234567890', 1);	向emp表中插入一条新记录。

更新

UPDATE emp SET phone = '0987654321' WHERE id = 1;	更新emp表中id为1的记录,将其电话号码更新为'0987654321'

删除

DELETE FROM emp WHERE id = 1;	删除emp表中id为1的记录。

复合操作

SELECT emp.name, dept.name FROM emp INNER JOIN dept ON emp.deptId = dept.id;	使用INNER JOIN连接emp表和dept表,查询员工及其部门名称。
SELECT emp.name, dept.name FROM emp LEFT JOIN dept ON emp.deptId = dept.id;	使用LEFT JOIN连接emp表和dept表,查询所有员工及其部门名称,如果员工没有部门,则部门名称为NULL
SELECT emp.name, dept.name FROM emp RIGHT JOIN dept ON emp.deptId = dept.id;	使用RIGHT JOIN连接emp表和dept表,查询所有部门及其员工名称,如果没有员工,则员工信息为NULL

完结,撒花!求赞求关注! 有问题可威:c_-j_-c


网站公告

今日签到

点亮在社区的每一天
去签到