Linux mysql 联表查询
在rhce考试题中,第21、22题为数据库查询题
题目:
在system1上创建一个Maria DB数据库,名为Contacts,要求:
- 数据库应该包含来自数据库users.mdb的内容,数据库只能被localhost访问
- 除了root用户,此数据库只能被用户Marry查询,此用户密码为redhat
- root用户的数据库密码为redhat,同时不允许空密码登录
- 密码是fadora的人的名字是什么?
- 有多少人姓名是John,同时居住在Santa Clara?
为了完成这个实验,我已将user.mdb放到本文最下方,复制保存为user.mdb,在数据库中source 该文件即可执行
该文章主要看第四和第五个问题
1、密码是fadora的人的名字
- SELECT
- u_name.firstname
- FROM
- u_name,
- u_passwd
- WHERE
- u_name.userid = u_passwd.uid
- AND u_passwd.PASSWORD = 'fadora';
2、有多少名为John并且居住在Santa Clara的
- SELECT
- COUNT(*)
- FROM
- u_name,
- u_loc
- WHERE
- u_name.userid = u_loc.uid
- AND u_name.firstname = 'John'
- AND u_loc.location = 'Santa Clara'
COUNT(*) 统计排除值为null的行的个数
COUNT(1) 统计第一个字段不会null的行的个数
讲解:
- SELECT 执行顺序为最后 ,显示以下条件符合之后需要的值
- u_name.firstname
- FROM 执行顺序为第一,在from下的表中查询
- u_name,
- u_passwd
- WHERE 执行顺序为第二 ,查询from下的表符合条件的
- u_name.userid = u_passwd.uid
- AND u_passwd.PASSWORD = 'fadora';
参考2得出的结论
- SELECT
- 你想要的东西
- FROM
- 这些东西有关的所有的表
- WHERE
- 这些表中的相同条件
- AND 某张表中单独的条件
- AND 某张表中单独的条件
连表查询:
找到将多张表关联起来的字段,然后查询条件中写使关联的字段相等,最后写条件
练习3
查询密码是fedora,并且住址是Santa Clara的人
- SELECT
- res.firstname
- FROM
- ( SELECT * FROM u_name, u_passwd WHERE u_name.userid = u_passwd.uid AND u_passwd.PASSWORD = 'fadora' ) res,
- u_loc
- WHERE
- res.userid = u_loc.uid
- AND u_loc.LOCATION = 'Santa Clara';
解析:
res为新表,res.firstname 为新表中的字段
首先查询所有密码是fadora的人,然后将查询结果作为新表,命名为res,然后继续联表查询
练习例子:
有a,b,c三张表
a(uid,name)
b(uid.password)
c(name.local)
三张表关联为a和b通过uid关联,a和c通过name关联,b和c无关联
查询name为jerry,password为sun并且local是four road的人名字
- SELECT
- res.a_name
- FROM
- ( SELECT name.a_name FROM name, passwd WHERE name.a_uid = passwd.u_uid AND passwd.u_passwd = 'sun' ) res ,local
- where
- res.a_name = local.a_name
- AND local.a_local = 'four road'
res为新表别名
或者可以写为
- SELECT
- res.a_name
- FROM
- ( SELECT name.a_name FROM name, passwd WHERE name.a_uid = passwd.u_uid AND passwd.u_passwd = 'sun' ) res left join local ON
- res.a_name = local.a_name
- AND local.a_local = 'four road'
user.mdb文件内容
- -- MySQL dump 10.14 Distrib 5.5.35-MariaDB, for Linux (x86_64)
- --
- -- Host: localhost Database: Contacts
- -- ------------------------------------------------------
- -- Server version 5.5.35-MariaDB
- /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
- /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
- /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
- /*!40101 SET NAMES utf8 */;
- /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
- /*!40103 SET TIME_ZONE='+00:00' */;
- /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
- /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
- /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
- /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
- --
- -- Table structure for table `u_name`
- --
- DROP TABLE IF EXISTS `u_name`;
- /*!40101 SET @saved_cs_client = @@character_set_client */;
- /*!40101 SET character_set_client = utf8 */;
- CREATE TABLE `u_name` (
- `userid` int(11) NOT NULL AUTO_INCREMENT,
- `firstname` varchar(50) NOT NULL,
- `lastname` varchar(50) NOT NULL,
- PRIMARY KEY (`userid`)
- ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;
- /*!40101 SET character_set_client = @saved_cs_client */;
- --
- -- Dumping data for table `u_name`
- --
- LOCK TABLES `u_name` WRITE;
- /*!40000 ALTER TABLE `u_name` DISABLE KEYS */;
- INSERT INTO `u_name` VALUES (1,'san','zhang'),(2,'si','li'),(3,'wu','wang'),(4,'Barack','Obama'),(5,'George','Walker Bush'),(6,'Bill','Clinton'),(7,'Hillary','Clinton'),(8,'John','Clinton'),(9,'George','wang'),(10,'John','li'),(11,'Bill','wang'),(12,'George','Obama'),(13,'George','wang'),(14,'Michael','Jackson'),(15,'John','Clinton'),(16,'Michael','Walker Bush'),(17,'Michael','Obama'),(18,'Hillary','Jackson'),(19,'Georgexx','Jackson'),(20,'Barack','Jackson'),(21,'John','Jackson'),(22,'John','Obama'),(23,'John','Clinton'),(24,'John','Walker Bush'),(25,'John','wang');
- /*!40000 ALTER TABLE `u_name` ENABLE KEYS */;
- UNLOCK TABLES;
- --
- -- Table structure for table `u_passwd`
- --
- DROP TABLE IF EXISTS `u_passwd`;
- /*!40101 SET @saved_cs_client = @@character_set_client */;
- /*!40101 SET character_set_client = utf8 */;
- CREATE TABLE `u_passwd` (
- `uid` int(11) NOT NULL AUTO_INCREMENT,
- `password` varchar(50) NOT NULL,
- PRIMARY KEY (`uid`)
- ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;
- /*!40101 SET character_set_client = @saved_cs_client */;
- --
- -- Dumping data for table `u_passwd`
- --
- LOCK TABLES `u_passwd` WRITE;
- /*!40000 ALTER TABLE `u_passwd` DISABLE KEYS */;
- INSERT INTO `u_passwd` VALUES (1,'redhat'),(2,'fedora'),(3,'centos'),(4,'centes'),(5,'redhrt'),(6,'ridhat'),(7,'redfat'),(8,'fadora'),(9,'cantos'),(10,'redhap'),(11,'contos'),(12,'fcdora'),(13,'cendora'),(14,'tangene'),(15,'tangrine'),(16,'tangerone'),(17,'tangeine'),(18,'taangerine'),(19,'tangerine'),(20,'tanggerine'),(21,'anggerine'),(22,'aggerine'),(23,'taggerine'),(24,'tanerine'),(25,'tannerine');
- /*!40000 ALTER TABLE `u_passwd` ENABLE KEYS */;
- UNLOCK TABLES;
- --
- -- Table structure for table `u_loc`
- --
- DROP TABLE IF EXISTS `u_loc`;
- /*!40101 SET @saved_cs_client = @@character_set_client */;
- /*!40101 SET character_set_client = utf8 */;
- CREATE TABLE `u_loc` (
- `uid` int(11) NOT NULL AUTO_INCREMENT,
- `location` varchar(50) NOT NULL,
- PRIMARY KEY (`uid`)
- ) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;
- /*!40101 SET character_set_client = @saved_cs_client */;
- --
- -- Dumping data for table `u_loc`
- --
- LOCK TABLES `u_loc` WRITE;
- /*!40000 ALTER TABLE `u_loc` DISABLE KEYS */;
- INSERT INTO `u_loc` VALUES (1,'Shenzhen'),(2,'Guangzhou'),(3,'Santa Clara'),(4,'Santa Clara'),(5,'San Francisco'),(6,'Santa Calara'),(7,'Santa Clare'),(8,'Santa Clara'),(9,'Florida'),(10,'Santa Claraa'),(11,'Florida'),(12,'State of Texas'),(13,'State of Texas'),(14,'Santa Claraa'),(15,'Santa Clara'),(16,'Colorado?CO'),(17,'Hawaii?HI'),(18,'Santa Calara'),(19,'Santa Clra'),(20,'Santa Clara'),(21,'Santa Clara'),(22,'Minnesota'),(23,'Vermont'),(24,'Santa Clara'),(25,'Minnesota');
- /*!40000 ALTER TABLE `u_loc` ENABLE KEYS */;
- UNLOCK TABLES;
- /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
- /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
- /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
- /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
- /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
- /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
- /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
- /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
- -- Dump completed on 2016-07-24 18:17:53
Linux mysql 联表查询的更多相关文章
- (转)MySQL联表查询
资料源于网络 一.内联结.外联结.左联结.右联结的含义及区别在SQL标准中规划的(Join)联结大致分为下面四种:1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结.2 ...
- [MySQL] MySQL联表查询的执行顺序优化查询
SELECT t4.orgName, t3.projectName, t3.Partner, t1.type, COUNT(DISTINCT t1.imei) AS count FROM `t_tem ...
- 了解MySQL联表查询中的驱动表,优化查询,以小表驱动大表
一.为什么要用小表驱动大表 1.驱动表的定义 当进行多表连接查询时, [驱动表] 的定义为: 1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表] 2)未指定联接条件时,行数少的表为[驱动表 ...
- 【explain】MySQL联表查询中的驱动表
写在前面 1.不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程 2.不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小 3 ...
- MySQL 联表查询
关系型数据库,免不了表之间存在各种引用与关联.这些关联是通过主键与外键搭配来形成的.所以,取数据时,很大情况下单张表无法满足需求,额外的数据则需要将其他表加入到查询中来,这便是 JOIN 关键字完成的 ...
- mysql联表查询,使用phpStudy自带的
一.内联结.外联结.左联结.右联结的含义及区别在SQL标准中规划的(Join)联结大致分为下面四种:1.内联结:将两个表中存在联结关系的字段符合联结关系的那些记录形成记录集的联结.2.外联结:分为外左 ...
- mysql联表查询
2.1 内连接 select a.*,b.* FROM a INNER join b ON a.id = b.id; 查出所有 或者 select a.*,b.* FROM a join b ...
- [慢查优化]联表查询注意谁是驱动表 & 你搞不清楚谁join谁更好时请放手让mysql自行判定
写在前面的话: 不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程: 不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小: ...
- Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题
Mysql数据库表排序规则不一致导致联表查询,索引不起作用问题 表更描述: 将mysql数据库中的worktask表添加ishaspic字段. 具体操作:(1)数据库worktask表新添是否有图片字 ...
随机推荐
- SSH(远程登录)原理
最近在研究hadoop,因为是分布式的,会涉及很多机器协作工作,但所有的操作都是需要进行权限验证的,namenode主机会尝试启动datanode主机上的进程等等.下面就用一张图来解释SSH登录验证的 ...
- 重读 谢希仁《计算机网络》3 - 网络层和IP协议
- Oracle Sql Loader的学习使用
最近由于遇到oracle控制文件的使用,虽然不是很复杂,但是从来没有用过,专门花点时间看看.点击 这里 查看详细 1,概述: Sql Loader: 一个批量工具,将文件数据导入到数据库.可以导入一个 ...
- liunx学习笔记(一:常用命令)
linux: 在学习linux之前我们应该多少了解windows的一些相关操作,linux也就是类似windows的另一种操作系统,用来管理软硬件的一种应用.在windows下你可以通过鼠标点击相关的 ...
- day51 django第二天 django初识
一.模块渲染 jinja2 实现简单的字符串替换(动态页面) 1.下载 pip install jinja2 示例 : html文件中 <!DOCTYPE html> <html ...
- zabbix使用微信报警(四)
https://qy.weixin.qq.com/ 企业号注册 http://qydev.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5 ...
- 让Mustache支持简单的IF语句
转载:https://blog.csdn.net/iteye_16732/article/details/82070065 Mustache是一种Logic-less templates.不支持if这 ...
- 各CF-based tracker中output_sigma_factor取值
现有的各CF-Based tracker中理想高斯响应中output_sigma_factor的取值情况 默认output_sigma = target_sz*output_sigma_factor; ...
- SQL查:询结果区分大小写
在MS SQL2005中的方法: 1)select * from user where name collate Chinese_PRC_CS_AS like 'A$%B%' escape '$'; ...
- spi、iic、can高速传输速度与选择
uart: 无限制,常用9600.115200bps等保证双方通信速度相同. iic: 通讯速率400Kbps can: 一般为1Mbps SPI: 通信速率 fosc/4其传输速度可达几Mb/s 缺 ...