加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

Linux mysql 联表查询

发布时间:2020-12-14 01:42:46 所属栏目:Linux 来源:网络整理
导读:在rhce考试题中,第21、22题为数据库查询题 题目: 在system1上创建一个Maria DB数据库,名为Contacts,要求: 数据库应该包含来自数据库users.mdb的内容,数据库只能被localhost访问 除了root用户,此数据库只能被用户Marry查询,此用户密码为redhat root用

在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 某张表中单独的条件

?

连表查询:
找到将多张表关联起来的字段,然后查询条件中写使关联的字段相等,最后写条件

练习例子:

有a,b,c三张表
a(uid,name)
b(uid.password)
c(name.local)

?

三张表关联为a和b通过uid关联,a和c通过name关联,b和c无关联

查询namejerry,passwordsun并且localfour 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 @[email?protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email?protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email?protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @[email?protected]@TIME_ZONE */;
/*!40103 SET TIME_ZONE=‘+00:00‘ */;
/*!40014 SET @[email?protected]@UNIQUE_CHECKS,UNIQUE_CHECKS=0 */;
/*!40014 SET @[email?protected]@FOREIGN_KEY_CHECKS,FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @[email?protected]@SQL_MODE,SQL_MODE=‘NO_AUTO_VALUE_ON_ZERO‘ */;
/*!40111 SET @[email?protected]@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,(8,John,(9,(10,(11,(12,(13,(14,Michael,Jackson),(15,(16,(17,(18,(19,Georgexx,(20,(21,(22,(23,(24,(25,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),fedora),centos),centes),redhrt),ridhat),redfat),fadora),cantos),redhap),contos),fcdora),cendora),tangene),tangrine),tangerone),tangeine),taangerine),tangerine),tanggerine),anggerine),aggerine),taggerine),tanerine),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),Guangzhou),Santa Clara),San Francisco),Santa Calara),Santa Clare),Florida),Santa Claraa),State of Texas),Colorado?CO),Hawaii?HI),Santa Clra),Minnesota),Vermont),Minnesota);
/*!40000 ALTER TABLE `u_loc` ENABLE KEYS */;
UNLOCK TABLES;
/*!40103 SET [email?protected]_TIME_ZONE */;

/*!40101 SET [email?protected]_SQL_MODE */;
/*!40014 SET [email?protected]_FOREIGN_KEY_CHECKS */;
/*!40014 SET [email?protected]_UNIQUE_CHECKS */;
/*!40101 SET [email?protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email?protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email?protected]_COLLATION_CONNECTION */;
/*!40111 SET [email?protected]_SQL_NOTES */;

-- Dump completed on 2016-07-24 18:17:53

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读