-建表、删除表
CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… )
例:CREATE TABLE tab01(name varchar(50),datetime default now());
DROP TABLE 数据表名称 (永久性删除一个数据表)
-更改表结构
ALTER TABLE table_name ADD COLUMN column_name DATATYPE 加列
ALTER TABLE table_name ADD PRIMARY KEY (column_name) 添加主键
ALTER TABLE table_name DROP PRIMARY KEY (column_name)
CREATE INDEX index_name ON table_name (column_name) 建索引
DROP table_name
DROP index_name
-基本查询
sql= Select * From 数据表 Where 字段名= 字段值 Order By 字段名 [desc];
sql= Select * From 数据表 Where 字段名 like '%字段值%' Order By 字段名 [desc];
sql= Select top 10 * From 数据表 Where 字段名 Order By 字段名 [desc];
sql= Select * From 数据表 Where 字段名 in ('值1','值2','值3');
sql= Select * From 数据表 Where 字段名 between 值1 and 值2;
-更新操作
sql= update 数据表 set 字段名= 字段值 Where 条件表达式;
sql= update 数据表 set 字段1= 值1,字段2= 值2 …… 字段n= 值n Where 条件表达式;
-删除操作
sql= delete From 数据表 Where 条件表达式;
sql= delete From 数据表 (将数据表所有记录删除);
sql= truncate Table 表名;
-插入数据
sql= insert into 数据表 (字段1,字段2,字段3 …) values (值1,值2,值3 …);
sql= insert into 目标数据表 select * from 源数据表 (把源数据表的记录添加到目标数据表);
-聚合函数
AVG(字段名) 得出一个表格栏平均值
COUNT(*|字段名) 对数据行数的统计或对某一栏有值的数据行数统计
MAX(字段名) 取得一个表格栏最大的值
MIN(字段名) 取得一个表格栏最小的值
SUM(字段名) 把数据栏的值相加
引用以上函数的方法:
sql= select sum(字段名) as 别名 from 数据表 where 条件表达式
set rs= conn.excute(sql)
用 rs(别名) 获取统的计值,其它函数运用同上
-连接语句
-Inner Join & Left Join/Right join。内连接,只连接匹配的行;左连接= 左表所有行+右表符合ON的匹配行(无的显示为Null)。性能上,尽量用inner join,避免 LEFT JOIN
-union & union all,前者不显示重复的值,UNION ALL 命令会列出所有的值(包括重复的)
1.尽量少用where条件:
select * from A
inner join B on B.name = A.name
left join C on C.name = B.name and C.status>1
left join D on D.id = C.id and D.status= 1
2.SELECT column_name(s) FROM table_name1 UNION ALL SELECT column_name(s) FROM table_name2;
-分组、排序
-Group by,对select查询出来的结果集按照某个字段或者表达式进行分组,获得一组组的集合
-Order by,排序asc、desc
-Having
-用于对where和group by查询出来的分组经行过滤,查出满足条件的分组结果
-having只能用于group by(分组统计语句中)
-having 子句中的每一个元素也必须出现在select列表中
-having语句可以使用聚合函数(sum、avg等),而where不使用
-exists
-exist和in,前者强调的是是否返回结果集,不要求知道返回什么;
exists 与 in 最大的区别在于 in引导的子句只能返回一个字段
-true用Exists,false用Not Exists
示例:
查询所有选修了“C1”课程的学生名:
SELECT 姓名 FROM 学生表 WHERE EXISTS
( SELECT * FROM 选课表 WHERE 学生表.学号 = 选课表.学号 AND 课程号 = 'C1' );
解释:先在外层查询中取“学生表”的第一行记录,用该记录的相关的属性值(在内层WHERE子句中给定的)处理内层查询,若外层的WHERE子句返回“TRUE”值,则这条记录放入结果表中。然后再取下一行记录;重复上述过程直到外层表的记录全部遍历一次为止
-多语句执行顺序
-执行顺序:select –>where –> group by–> having–>order by
-Case语句
-需要从数据源上 直接判断数据显示代表的含义的时候 ,就可以在SQL语句中使用 Case When
-Case具有两种格式:
(1)简单Case函数:when 条件值1 then 选择项1 ;
(2)Case搜索函数:when 列名= 条件值1 then 选择项1;
示例:
(1)CASE gender WHEN '0' THEN '男' WHEN '1' THEN '女' ELSE '其他' END CASE;
select (case sex when 'MALE' Then '男' else '其他' end) from member;
(2)update employee
set e_wage =
case
when job_level = '1' then e_wage*1.97
when job_level = '2' then e_wage*1.07
when job_level = '3' then e_wage*1.06
else e_wage*1.05
end
-其他
日期-mysql:DATE_FORMAT(date,format)
select * from product where Date_Format(start_date, '%Y-%m-%d')='2018-04-08';
-索引
使用索引,可以提高查询性能,类似书本的目录;
一般以下情况可以使用索引:
1.在经常需要搜索的列上,可以加快索引的速度;
2.主键列上可以确保列的唯一性;
3.在表与表的而连接条件上加上索引,可以加快连接查询的速度;
4.在经常需要排序(order by),分组(group by)和的distinct 列上加索引;
使用索引的缺点:需要动态维护、占用物理空间、多种索引组合会导致索引文件膨胀很快;
示例:
CREATE INDEX account_Index ON `award`(`account`);
-视图
视图,是一个虚拟表,其内容由查询定义;
视图的好处:
1.对数据库重构却不影响程序的运行;
2.提高了安全性能,可以对不同的用户,设定不同的视图;
3.让数据更加清晰,想要什么样的数据,就创建什么样的视图;
4.提高了重用性, 类似于函数的调用;
示例:
CREATE VIEW view_name as SELECT....;
-Show
-show的常用方式:
1. show tables或show tables from database_name; 显示当前数据库中所有表的名称
2. show databases; 显示mysql中所有数据库的名称
3. show columns from database_name.table_name; 显示表中列名称
4. show grants for user_name; 显示一个用户的权限,显示结果类似于grant 命令
5. show index from table_name; 显示表的索引
6. show status; 显示一些系统特定资源的信息,例如,正在运行的线程数量
7. show variables; 显示系统变量的名称和值
8. show processlist; 显示系统中正在运行的所有进程
9. show [storage] engines; --显示安装后的可用存储引擎和默认引擎
10. show privileges; 显示服务器所支持的不同权限
11. show create database database_name; 显示create database语句
12. show create table table_name; 显示create table 语句
13. show engines; 显示安装以后可用的存储引擎和默认引擎
14. show innodb status; 显示innoDB存储引擎的状态
15. show logs; 显示BDB存储引擎的日志
16. show warnings; 显示最后一个执行的语句所产生的错误、警告和通知
17. show errors; 只显示最后一个执行语句所产生的错误
-其他
show global variables; 查询所有的全局变量
show variables; 查询所有的会话变量