@Dubyoo
2014-06-14T08:09:11.000000Z
字数 2407
阅读 2683
SQL
CREAT DATABASE MyDatabase;
CREATE TABLE `user` (`user_id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(45) NOT NULL,`email` varchar(255) NOT NULL,PRIMARY KEY (`user_id`),UNIQUE KEY `name_UNIQUE` (`name`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
DROP DATABASE MyDatabase;
| 动作 | SQL | 描述 | 示例 |
|---|---|---|---|
| 创建 | INSERT | 插入新数据 | INSERT INTO user VALUES (‘Tom’, 24); |
| 读取 | SELECT | 读取数据 | SELECT * FROM user WHERE name=‘Tom’; |
| 更新 | UPDATE | 更新数据 | UPDATE user SET name = ‘Alex’ WHERE id=1; |
| 删除 | DELETE | 删除数据 | DELETE FROM user WHERE id=1; |
Select * From user Where id = 1;
Select * From article Where uid In(Select uid From user Where status=1);
假定有两张表:
A: B:Id Name Id Name-- ---- -- -- -----1 张三 1 小明2 李四 2 张三3 王五 3 小红4 赵六 4 王五
内连接只生成表A和表B中匹配的记录的集合。
Select * From A Inner Join B On A.name = B.name
结果:Id Name Id Name--- ------- --- ----1 张三 2 张三3 王五 4 王五
全外连接生成表A和表B中所有记录的集合。如果匹配,两边都有值,否则以null填充。
Select * From A Full Outer Join B On A.name = B.name
结果:Id Name Id Name--- ------- --- ----1 张三 2 张三2 李四 null null3 王五 4 王五4 赵六 null nullnull null 1 小明null null 3 小红
左外连接生成表A中所有记录和表B中匹配的记录的集合。如果不匹配,右端以null填充。
Select * From A Left Outer Join B On A.name = B.name
结果:Id Name Id Name--- ------- --- -------1 张三 2 张三2 李四 null null3 王五 4 王五4 赵六 null null
为了获得只在Table A而不在Table B中的记录,使用左外连接,通过where语句来排除右边不想要的部分。
Select * From A Left Outer Join B On A.name = B.nameWhere B.id Is null
结果:Id Name Id Name--- ------- --- -------2 李四 null null4 赵六 null null
Select * From A Right Outer Join B On A.name = B.name
将两个表中所有记录做一次笛卡尔乘积,不使用任何匹配或者选取条件。
//以下语句等效:Select * From A Funll Join B;Select * From A Cross Join B;支持 ON,WHERE例如:Select * From A Cross Join B On A.name=B.name Where A.id=1;Select * From A, B;支持 WHERE例如:Select * From A, B Where A.name=B.name And A.id=1;Select * From A Join B;支持ON,WHERE例如: Select * From A Join B On A.name=B.name Where A.id=1;
Group By //结合统计函数,根据一列或多列对结果进行分组
Order By //对结果集进行排序
Having //弥补WHERE语句无法与统计函数一起使用
1) Count()
//返回指定列的值的数目Select Count(column_name) From table_name
2) Sum()
//返回数值列的总和Select Sum(column_name) From table_name
创建表
Student: sid, name, ageClass: cid, nameStudentClass: sid, cid//往每张表插入>10行的数据
查询:
Select name, age From Student Where age>20
Select c.name, sc.numFrom Class c, (Select cid, Count(sid) num From StudentClass Group By cid) scWhere c.cid = sc.cid
Selcet c.name sc.numFrom Class, (Select cid, Count(sid) num From StudentClass Group By cid) scWhere c.cid = sc.cid and sc.num > 30
Select Count(sid) From StudentClass Group By cidHaving StudentClass.cid in(Select StudentClass.cid From Student, StudentClass Where Student.name = "Tom" and Student.sid = StudentClass.sid)