日常工作中,SQL是大多数分析人员必须精通的工具。SQL语句种类繁多,功能强大能够满足数据查询、更新、删除、插入以及数据库和表结构管理等。本文将详细介绍一系列史上超强、最常用的SQL语句,帮助读者在实际工作中更加高效地操作数据库。
一、数据定义语言:用于定义和管理数据库对象等
1、数据库的操作
--001 创建数据库CREATE DATABASE my_db; -- 创建名为my_db的数据库create database if not exists my_db; --创建时会检查是否存在my_db,如果不存在则创建--002 查看所有数据库SHOW DATABASES;--003 使用库USE my_db --选择并切换到my_db--004 删除库(慎用)DROP DATABASE --删除数据库my_db
2、数据表的操作
--005 创建表CREATE TABLE my_db (id INT ,name VARCHAR(100) NOT NULL,email VARCHAR(100) UNIQUE NOT NULL);--006 查看表的列信息DESC my_db;--007 删除表drop table my_db;--008 新增列ALTER TABLE my_tb ADD COLUMN piaoshu INT;--009 删除列ALTER TABLE my_tb DROP COLUMN piaoshu;
--010 指定字段插入单条数据INSERT INTO my_tb (id,name)VALUES (898,'张三');--011 指定字段插入多条数据INSERT INTO my_tb (id,name)VALUES (899,'李四');VALUES (900,'王五');--012 所有字段插入数据:写出所有字段名或者不写insert into 表名 values(值1,值2,...值n)
--013 删除指定条件的数据:DELETE FROM my_tb WHERE name = '张三';--014 删除所有数据但是会保留原有数据结构DELETE FROM my_tb
--015 更新满足条件的记录中的某个字段UPDATE my_tb SET name = '赵大' WHERE id = '900';--016 更新所有记录中的某个字段UPDATE my_tb SET id = id+ 1;
--017 查询所有数据(实际工作中不建议)SELECT * FROM my_tb;--018 查询指定字段的数据SELECT id,name FROM my_tb;
--018 使用WHERE进行条件查询SELECT * FROM my_tb WHERE name ='l李四';
--019 升序查询SELECT * FROM my_tb ORDER BY id ASC;--020 降序查询SELECT * FROM my_tb ORDER BY id DESC;
--021 结合聚会函数进行查询SELECTCOUNT(*), --记录数SUM(piaoshu), --票数和AVG(piaoshu) --平均票数FROMmy_tb
--022 使用GROUP BY结合聚合函数进行分组查询-- 假设有表my_ta,有字段 部门、销量,现要求查出每个部门的销量SELECT 部门, SUM(销量) FROM my_ta GROUP 部门;
6、分页查询
--023 使用LIMIT子句限制返回的行数,常用于分页显示结果SELECT * FROM my_tb LIMIT 10 OFFSET 20;
7、多表查询
--024 等值查询SELECT last_name,department_nameFROM employees eINNER JOIN departments dON e.`department_id`=d.`department_id`;--025 左外连接查询SELECT b.name,bo.*FROM beauty bLEFT OUTER JOIN boys boON b.`boyfriend_id`=bo.`id`WHERE bo.`id` IS NULL;--026 右外连接查询SELECT b.name,bo.*FROM boys boRight OUTER JOIN beauty bON b.`boyfriend_id`=bo.`id`WHERE bo.`id` IS NULL;
8、子查询
--027 WHERE后面的子查询SELECT last_name,salaryFROM employeesWHERE salary>(SELECT salary from employees where last_name='Abel')--028 HAVING后面的子查询SELECT department_id,MIN(salary)FROM employees GROUP BY department_idHAVING MIN(salary)>(SELECT MIN(salary) FROM employees WHERE department_id =110)--029 select后面的子查询SELECT d.*,(SELECT COUNT(*)FROM employees eWHERE e.department_id =d.department_id) 个数FROM departments d;--030 FROM后面的子查询SELECT ag_dep.*,g.`grade_level`FROM(SELECT AVG(salary) AS ag,department_idFROM employees GROUP BY department_id) ag_depINNER JOIN job_grades AS gON ag_dep.ag BETWEEN lowest_sal AND highest_sal
9、联合查询
--031 联合查询使用union 或者union all-- 两者区别:-- union:对多个结果集进行并集操作,不包括重复行,同时进行排序。-- union all:对多个结果集进行并集操作,包括重复行,不进行排序。select id,caname,csex from t_ca where csex='男'union allselect t_id,t_name,t_gender from t_ua where tgender='male'
四、数据控制语言:于创建数据库用户、控制数据库的访问权限等
1、用户管理
--032 查询用户SELECT * FROM user--033 新建用户CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';--034 修改用户密码ALTER USER 'username'@'localhost' IDENTIFIEDWITH mysql_native_password BY 'new_password';--035 删除用户DROP USER 'username'@'localhost';
2、权限管理
--036 查询用户权限SHOW GRANTS FOR 'username'@'localhost';--037 授予权限GRANT SELECT, INSERT, UPDATE ONmy_database.* TO 'username'@'localhost';--038 撤销权限REVOKE SELECT, INSERT, UPDATE ONmy_database.* FROM 'username'@'localhost';
