通过两张表,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