基本sql语句

1.操作数据库

sql 复制代码
#创建数据库
CREATE DATABASE exercise;
#创建不存在的数据库
CREATE DATABASE IF NOT EXISTS exercise;
#查看所有数据库
SHOW DATABASES;
#查看某个数据库的定义信息
SHOW CREATE DATABASE exercise;
#修改数据库字符信息
ALTER DATABASE exercise CHARACTER SET utf8;
#删除数据库
DROP DATABASE exercise;

2.操作表

sql 复制代码
#创建表
CREATE TABLE student(
	id INT,
	`name` VARCHAR(32),
	age INT,
	score DOUBLE(4,1),
	birthday DATE,
	insert_time TIMESTAMP
);
#查看表信息
DESC student;
#查看创建表的sql语句
SHOW CREATE TABLE student;
#修改表的名称
ALTER TABLE student RENAME TO students;
#添加一列
ALTER TABLE students ADD nick_name VARCHAR(32);
#删除列
ALTER TABLE students DROP nick_name;
#删除表
DROP TABLE students;
DROP TABLE IF EXISTS students;

3.操作表中的数据

增加 insert into
sql 复制代码
#写全所有列名
INSERT INTO student(id,`name`,age,score,birthday,insert_time)
		VALUES(1,'xwz',22,80.8,'20020101',NOW());
#不写列名(所有的列都添加)
INSERT INTO student VALUES(2,'xwz',21,90.0,'20021215',NOW());
#插入部分数据
INSERT INTO student(id,`name`,insert_time) 
	VALUES(3,'jesse',NOW());
删除 delete
sql 复制代码
#删除表中的数据
DELETE FROM student WHERE id = 2;
#删除表中的所有数据
DELETE FROM student;
#删除表中的所有数据(高效 先删除表,然后再创建一张一样的表)
TRUNCATE TABLE student;
修改 update
sql 复制代码
#不带条件修改(会修改表中该列的所有记录)
UPDATE student SET age = 20;
#带条件修改
UPDATE student SET age = 25 WHERE `name` = 'jesse';
查询 select

between and 和 in

sql 复制代码
#范围查询
SELECT * FROM student WHERE age>=20 && age<=30;
SELECT * FROM student WHERE age>=20 AND age<=30;
SELECT * FROM student WHERE age BETWEEN 20 AND 30;

#多值查询
SELECT * FROM student WHERE age=15 OR age=20 OR age=25; 
SELECT * FROM student WHERE age IN(15,20,25);

is not null 和 like 和 distinct

sql 复制代码
#查询不为空
SELECT * FROM student WHERE score IS NOT NULL;

#模糊查询 _:单个任意字符  %:多个任意字符
#名字以x开头
SELECT * FROM student WHERE `name` LIKE 'x%';
#名字第二个是e
SELECT * FROM student WHERE `name` LIKE '_e%';
#名字包含3个字
SELECT * FROM student WHERE `name` LIKE '_____';
#名字包含w
SELECT * FROM student WHERE `name` LIKE '%w%';

#distinct
SELECT DISTINCT `name` FROM student;

order by

sql 复制代码
#order by 
#默认升序
SELECT * FROM student ORDER BY age;
#降序
SELECT * FROM student ORDER BY age DESC;

聚合函数

sql 复制代码
#count max min sum avg
SELECT SUM(age) FROM student;
SELECT AVG(age) FROM student;
SELECT COUNT(*) FROM student;
SELECT MIN(age) FROM student;
SELECT MAX(age) FROM student;

分组查询 group by

sql 复制代码
#按名称分组,统计平均值
SELECT `name`,AVG(score) FROM student GROUP BY `name`;
#按名称分组,统计平均值、个数
SELECT `name`,AVG(score),COUNT(*) FROM student GROUP BY `name`;
SELECT `name`,AVG(score),COUNT(id) FROM student GROUP BY `name`; 
#按名称分组,统计平均值、个数  但分数必须大于75
SELECT `name`,AVG(score),COUNT(*) FROM student WHERE score>75 GROUP BY `name`;
#按名称分组,统计平均值、个数  但分数必须大于75 且 人数分组人数大于1
SELECT `name`,AVG(score),COUNT(*) FROM student WHERE score>75 GROUP BY `name` HAVING COUNT(*)>1;

分页查询 limit

sql 复制代码
SELECT * FROM student LIMIT 0,1;
SELECT * FROM student LIMIT 1,1;
SELECT * FROM student LIMIT 2,1;

**内连接查询 **

sql 复制代码
#查询员工姓名、性别、部门名称(隐式内连接)
SELECT emp.name,emp.gender,dept.name 
FROM emp,dept 
WHERE emp.dept_id = dept.id; 

SELECT t1.name,t1.gender,t2.name 
FROM emp t1,dept t1
WHERE t1.dept_id = t2.id;

#显式内连接
SELECT * FROM emp INNER JOIN dept ON emp.dept_id = dept.id;
SELECT * FROM emp JOIN dept ON emp.dept_id = dept.id;

外连接

sql 复制代码
#左外连接
SELECT * FROM emp t1 LEFT JOIN dept t2 ON t1.dept_id = t2.id;
#右外连接
SELECT * FROM dept t2 RIGHT JOIN emp t1 ON t1.dept_id = t2.id;

子查询

sql 复制代码
#查询最高的员工工资信息
SELECT MAX(salary) FROM emp;#9000
SELECT * FROM emp WHERE salary = 9000;

SELECT * FROM emp WHERE salary = (SELECT MAX(salary) FROM emp);

#工资小于平均工资的人(子查询结果是单行单列)
SELECT * FROM emp WHERE salary < (SELECT AVG(salary) FROM emp);
#查询市场部和财务部的所有信息(子查询结果是多行单列)
SELECT * FROM emp WHERE dept_id IN (SELECT id FROM dept WHERE `name` = '财务部' OR `name` = '市场部');
#查询某日期后加入的员工信息和部门信息(子查询结果是多行多列)
SELECT * FROM emp t1,dept t2 WHERE t1.dept_id = t2.id AND t2.join_time > '20021020';#普通内连接
SELECT * FROM dept t2,(SELECT * FROM emp WHERE join_time > '20021020') t1 WHERE t1.dept_id = t2.id;

4.数据控制语言

管理用户

sql 复制代码
#添加用户
CREATE USER 'xwz'@'%' IDENTIFIED BY 'xwz';
#删除用户
DROP USER 'xwz'@'%';

权限管理

sql 复制代码
#添加用户
CREATE USER 'xwz'@'%' IDENTIFIED BY 'xwz';
#删除用户
DROP USER 'xwz'@'%';

#查询权限
SHOW GRANTS FOR 'xwz'@'%';
#授予权限
GRANT SELECT ON exercise.student TO 'xwz'@'%';
GRANT ALL ON *.* TO 'xwz'@'%';
#撤销权限
REVOKE UPDATE ON exercise.student FROM 'xwz'@'%'; 
相关推荐
Elastic 中国社区官方博客2 小时前
在 Elasticsearch 中使用 Mistral Chat completions 进行上下文工程
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
编程爱好者熊浪3 小时前
两次连接池泄露的BUG
java·数据库
南宫乘风4 小时前
基于 Flask + APScheduler + MySQL 的自动报表系统设计
python·mysql·flask
TDengine (老段)5 小时前
TDengine 字符串函数 CHAR 用户手册
java·大数据·数据库·物联网·时序数据库·tdengine·涛思数据
qq7422349845 小时前
Python操作数据库之pyodbc
开发语言·数据库·python
姚远Oracle ACE6 小时前
Oracle 如何计算 AWR 报告中的 Sessions 数量
数据库·oracle
Dxy12393102166 小时前
MySQL的SUBSTRING函数详解与应用
数据库·mysql
码力引擎6 小时前
【零基础学MySQL】第十二章:DCL详解
数据库·mysql·1024程序员节
杨云龙UP6 小时前
【MySQL迁移】MySQL数据库迁移实战(利用mysqldump从Windows 5.7迁至Linux 8.0)
linux·运维·数据库·mysql·mssql
l1t6 小时前
利用DeepSeek辅助修改luadbi-duckdb读取DuckDB decimal数据类型
c语言·数据库·单元测试·lua·duckdb