标签:
--查询cms_user id,username 省份表中和用户表中都有id --查询省份表中的 provinces ,proName SELECT cms_user.id,username,proName FROM cms_user,provinces;--这个查询是不对的,因为两个表中都有id,查询结果不是真正想要的结果,而是形成了笛卡尔积的形式 --cms_user的proId对应于省份表中的id SELECT cms_user.id,username,proName FROM cms_user,provinces WHERE cms_user.proId=provinces.id; --内连接(这个和上面的where的效果一样(先把每个表要查询东西写上,之后再写上条件) --查询cms_user表中的id,username,email,sex --查询provinces表中的proname SELECT u.id,u.username,u.email,u.sex,p.proName FROM cms_user AS u --连接第一张表 INNER JOIN provinces AS p --连接的第二张表 ON u.proId=p.id; --通过ON来指定连接条件,这里的条件是当user的表中的proid等会省份表中的id --第一个表要查询的:查询cms_user id,username,sex --第二个表要查询的:查询provinces prpName --ON后面的连接条件是:user表的proid等于省份表的id。 --条件:cms_user的性别为男的用户 SELECT u.id,u.username,u.sex,p.proName FROM cms_user AS u JOIN provinces AS p ON u.proId=p.id WHERE u.sex=‘男‘; --对分组结果进行筛选,根据proname分组,选出组中人数大于等于1的,并且按照用户表中的id进行升序排序,限制显示条数(前两条) SELECT u.id,u.username,u.sex,p.proName,COUNT(*) AS Totalsum,GROUP_CONCAT(sex) FROM cms_user AS u JOIN provinces AS p--连接 ON u.proId=p.id WHERE u.sex=‘男‘ GROUP BY p.proName HAVING COUNT(*)>=1 ORDER BY u.id ASC LIMIT 0,2; ; --查询cms_news中的id,title --查询cms_cate中的cateName --连接条件:n.cId=c.id SELECT n.id,n.title,c.cateName --先写要查询的, FROM cms_news AS n --再写要连接的几个表 JOIN cms_cate AS c ON n.cId=c.id;--写连接条件 --cms_news id,title --cms_cate cateName --cams_admin username ,role --连接条件:cms——news和cms——cate的条件:n.cId=c.id cms_news和cams_admin连接条件: SELECT n.id,n.title,c.cateName,a.username,a.role FROM cms_news AS n--三表连接cms_news 和cms_cate,,,cms_admin分别建立连接 JOIN cms_cate AS c ON n.cId=c.id JOIN cms_admin AS a ON n.aId=a.id;
--左外连接 SELECT u.id,u.username,u.email,u.sex,p.proName FROM cms_user AS u LEFT JOIN provinces AS p ON u.proId=p.id;
--创建部门表department(主表) --id depName CREATE TABLE IF NOT EXISTS deparment( id TINYINT UNSIGNED KEY AUTO_INCREMENT, depName VARCHAR(20) NOT NULL UNIQUE )ENGINE=INNODB; INSERT deparment(depName) VALUES(‘教学部‘), (‘市场部‘), (‘运营部‘), (‘督导部‘); --创建员工表 子表 employee CREATE TABLE IF NOT EXISTS employee( id TINYINT UNSIGNED KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL UNIQUE, depId TINYINT UNSIGNED )ENGINE=INNODB; INSERT employee(username,depId) VALUES(‘KING‘,1), (‘QUEUE‘,2), (‘ZHANGSAN‘,4), (‘LISI‘,4), (‘WANGWU‘,5); --查询员工的编号,用户名,部门名称 两个表 --连接条件 :e.depId=d.id;--内连接查询 SELECT e.id,e.username,d.depName FROM deparment AS d JOIN employee AS e ON e.depId=d.id; --删除督导部(部门解散了,理论上里面的员工也得解散,但是查询员工表的时候,发现还是有员工在督导部下面) --这就是如果你对父表做操作的时候,发现子表中有数据和父表相关联,就必须做一些操作,这里外键可以使用 SELECT FROM deparment WHERE proName=‘督导部‘; --创建外键--建表的时候创建 --先创建父表,再创建子表,在子表中建立外键 CREATE TABLE IF NOT EXISTS deparment( id TINYINT UNSIGNED KEY AUTO_INCREMENT, depName VARCHAR(20) NOT NULL UNIQUE )ENGINE=INNODB; CREATE TABLE IF NOT EXISTS employee( id TINYINT UNSIGNED KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL UNIQUE, depId TINYINT UNSIGNED, FOREIGN KEY(depId) REFERENCES deparment(id)--外键 )ENGINE=INNODB;
标签:
原文地址:http://www.cnblogs.com/Kobe10/p/5766492.html