附:数据库常用操作

建个表(User):

id

name

password

salt

head_url【用户头像】

 

CREATE TABLE `user`(

`id` INT NOT NULL AUTO_INCREMENT,

`name` VARCHAR(64) NOT NULL DEFAULT '',

`salt` VARCHAR(32) NOT NULL DEFAULT '',

`head_url` VARCHAR(256) NOT NULL DEFAULT '',

PRIMARY KEY (`id`),

UNIQUE KEY `name` (`name`))

ENGINE=INNODB DEFAULT CHARSET=utf8

(忘了加password):ALTER TABLE USER ADD `password` VARCHAR(128) NOT NULL DEFAULT ''

 

索引相关:

创建表时指定:

CREATE TABLE mytable(  

ID INT NOT NULL,   

username VARCHAR(16) NOT NULL,  

INDEX [indexName] (username(length))  

);  

创建表后修改:

ALTER TABLE tbl_name ADD PRIMARY KEY (column_list):

该语句添加一个主键,这意味着索引值必须是唯一的,且不能为NULL

ALTER TABLE tbl_name ADD UNIQUE index_name (column_list):

这条语句创建索引的值必须是唯一的(除了NULL外,NULL可能会出现多次)

ALTER TABLE tbl_name ADD INDEX index_name (column_list):

添加普通索引,索引值可出现多次

ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):

该语句指定了索引为 FULLTEXT ,用于全文索引

删除索引:DROP INDEX index_name ON table_name;

强制使用某个索引:

无join

select *

from table_a

force index(idx_name)

where ......

有join

select *from table_a

force index(idx_name)

left join table_b

where ......

索引显示:SHOW INDEX FROM table_name;

 

 

SELECT相关:

COUNT({*|[distinct] } <列名>)

统计行的数量

AVG([distinct] <列名>)

求平均值

SUM([distinct] <列名>)

求累加和

MAX([distinct] <列名>)

求最大值

MIN([distinct] <列名>)

求最小值

 

WHERE相关:

>=、<=、!=、<>:比较值的大小

[NOT] BETWEEN...AND... :【不】在某个范围内

AND | OR | NOT:可以多个使用

IN | NOT IN:是否在某个集合中

LIKE | NOT LIKE字符匹配,通配符只能在LIKE子句中使用

“_”:表示1个字符

“%”:表示多个字符

“[]”:表示某一范围的字符([0~9]:0~9之间的字符)

“[^]”:表示不在某一范围的字符([^0~9])

IS [NOT] NULL:是否为空值

 

分组查询:

GROUP BY:用于将表或视图中的数据的查询结果按某一列或多列的值进行分组,值相同的为一组

HAVING:*从分组中选择满足条件的分组,因此必须和GROUP BY配合使用

 

查询选修某门课人数超过2的课程:SELECT Class.`name` , COUNT(Student.`name`) AS `count` FROM class JOIN student ON Class.`id` = Student.`classId` GROUP BY class.`name` HAVING COUNT > 2

 

连接查询:

 

内连接:只显示符合ON条件的连接

SELECT * FROM Student INNER JOIN class ON Student.`classId` = class.`id`

左连接:显示符合条件的连接,以及左表中不符合条件的数据行(此时右边的数据行会以NULL的形式显示)

SELECT * FROM Student LEFT JOIN class ON Student.`classId` = class.`id`

右连接:显示符合条件的连接,以及右表中不符合条件的数据行(此时左边的数据行会以NULL的形式显示)

SELECT * FROM Student RIGHT JOIN class ON Student.`classId` = class.`id`

全连接:显示符合条件的数据行,以及左右表中不符合条件的数据行(不满足条件的均以NULL显示)

mysql数据库不支持full join,但是可以通过UNION ALL来进行模拟

SELECT * FROM Student LEFT JOIN class ON student.`classId` = class.`id`

UNION ALL

SELECT * FROM Student RIGHT JOIN class ON student.`classId` = class.`id`

交叉连接:相当于笛卡尔积,左表的数据和右表的数据一一匹配

SELECT * FROM Student CROSS JOIN class(开发中意义不大)

存在意义是为了保证数据完整性

自身连接:相互连接的表物理上为同一张表,通常情况下,为了对连接过程进行区别,要为这张表取两个别名以方便操作

SELECT f.`id`, f.name, s.name FROM class AS f, class AS s WHERE f.`pre` = s.`id`

注:表结构如下,pre表示选修当前课程需要提前选修的课程

注:查询后的结果

 

附:

order by xxx :(DESC降序,ASC升序)

UNION操作将多个查询结果合并在一起,同时自动删除重复行,如果不想删除重复行,则用UNION ALL,默认按第一列的值进行排序

关于Having的作用: Having的使用例题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值