zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

MySQL多表查询实现分析

mysql 实现 查询 分析 多表
2023-06-13 09:14:29 时间
我们继续使用前面的例子。前面建立的表中包含了员工的一些基本信息,如姓名、性别、出生日期、出生地。我们再创建一个表,该表用于描述员工所发表的文章,内容包括作者姓名、文章标题、发表日期。

  1、查看第一个表mytable的内容:

  mysql>select*frommytable;
  +----------+------+------------+-----------+
  |name|sex|birth|birthaddr|
  +----------+------+------------+-----------+
  |abccs|f|1977-07-07|china|
  |mary|f|1978-12-12|usa|
  |tom|m|1970-09-02|usa|
  +----------+------+------------+-----------+

  2、创建第二个表title(包括作者、文章标题、发表日期):

  mysql>createtabletitle(writervarchar(20)notnull,
  ->titlevarchar(40)notnull,
  ->senddatedate);
      向该表中填加记录,最后表的内容如下:
  <ccid_nobr>
  <tablewidth="400"border="1"cellspacing="0"cellpadding="2"
  bordercolorlight="black"bordercolordark="#FFFFFF"align="center">
  <tr>
  <tdbgcolor="e6e6e6""font-size:9pt">
  <pre><ccid_code>mysql>select*fromtitle;
  +--------+-------+------------+
  |writer|title|senddate|
  +--------+-------+------------+
  |abccs|a1|2000-01-23|
  |mary|b1|1998-03-21|
  |abccs|a2|2000-12-04|
  |tom|c1|1992-05-16|
  |tom|c2|1999-12-12|
  +--------+-------+------------+
  5rowsinset(0.00sec)

  3、多表查询

  现在我们有了两个表:mytable和title。利用这两个表我们可以进行组合查询:

  上面例子中,由于作者姓名、性别、文章记录在两个不同表内,因此必须使用组合来进行查询。必须要指定一个表中的记录如何与其它表中的记录进行匹配。

  注意:如果第二个表title中的writer列也取名为name(与mytable表中的name列相同)而不是writer时,就必须用mytable.name和title.name表示,以示区别。

  再举一个例子,用于查询文章a2的作者、出生地和出生日期:

  mysql>selecttitle,writer,birthaddr,birthfrommytable,title
  ->wheremytable.name=title.writerandtitle=′a2′;
  +-------+--------+-----------+------------+
  |title|writer|birthaddr|birth|
  +-------+--------+-----------+------------+
  |a2|abccs|china|1977-07-07|
  +-------+--------+-----------+------------+

  修改和备份、批处理

  有时我们要对数据库表和数据库进行修改和删除,可以用如下方法实现:

  1、增加一列:

  如在前面例子中的mytable表中增加一列表示是否单身single:

  mysql>altertablemytableaddcolumnsinglechar(1);

  2、修改记录

  将abccs的single记录修改为“y”:

  mysql>updatemytablesetsingle=′y′wherename=′abccs′;现在来看看发生了什么:

  mysql>select*frommytable;
  +----------+------+------------+-----------+--------+
  |name|sex|birth|birthaddr|single|
  +----------+------+------------+-----------+--------+
  |abccs|f|1977-07-07|china|y|
  |mary|f|1978-12-12|usa|NULL|
  |tom|m|1970-09-02|usa|NULL|
  +----------+------+------------+-----------+--------+

  3、增加记录

  前面已经讲过如何增加一条记录,为便于查看,重复与此:

  mysql>insertintomytable
  ->values(′abc′,′f′,′1966-08-17′,′china′,′n′);
  QueryOK,1rowaffected(0.05sec)

  查看一下:

  mysql>select*frommytable;
  +----------+------+------------+-----------+--------+
  |name|sex|birth|birthaddr|single|
  +----------+------+------------+-----------+--------+
  |abccs|f|1977-07-07|china|y|
  |mary|f|1978-12-12|usa|NULL|
  |tom|m|1970-09-02|usa|NULL|
  |abc|f|1966-08-17|china|n|
  +----------+------+------------+-----------+--------+

  4、删除记录

  用如下命令删除表中的一条记录:mysql>deletefrommytablewherename=′abc′;

  DELETE从表中删除满足由where给出的条件的一条记录。再显示一下结果:

  mysql>select*frommytable;
  +----------+------+------------+-----------+--------+
  |name|sex|birth|birthaddr|single|
  +----------+------+------------+-----------+--------+
  |abccs|f|1977-07-07|china|y|
  |mary|f|1978-12-12|usa|NULL|
  |tom|m|1970-09-02|usa|NULL|
  +----------+------+------------+-----------+--------+

  5、删除表:

  mysql>droptable****(表1的名字),***表2的名字;可以删除一个或多个表,小心使用。

  6、数据库的删除:

  mysql>dropdatabase数据库名;小心使用。

  7、数据库的备份:

  退回到DOS:

  mysql>quit

  d:\mysqlbin

  使用如下命令对数据库abccs进行备份:

  mysqldump--optabccs>abccs.dbb

  abccs.dbb就是你的数据库abccs的备份文件。

  8、用批处理方式使用MySQL:

  首先建立一个批处理文件mytest.sql,内容如下:

  useabccs;
  select*frommytable;
  selectname,sexfrommytablewherename=′abccs′;

  在DOS下运行如下命令:d:mysqlbinmysql<mytest.sql

  在屏幕上会显示执行结果。

  如果想看结果,而输出结果很多,则可以用这样的命令:mysql<mytest.sql|more

  我们还可以将结果输出到一个文件中:mysql<mytest.sql>mytest.out