Mysql数据库多表查询

一.介绍

  首先说一下,我们写项目一般都会建一个数据库,那数据库里面是不是存了好多张表啊,不可能把所有的数据都放到一张表里面,肯定要分表来存数据,这样节省空间,数据的组织结构更清晰,解耦和程度更高,但是这些表本质上是不是还是一个整体啊,是一个项目所有的数据,那既然分表存了,就要涉及到多个表连接查询了,比如说员工信息一张表,部门信息一张表,那如果我想让你帮我查一下技术部门有哪些员工的姓名,你怎么办,单独找员工表能实现吗,不能,单独找部门表也无法实现,因为部门表里面没有员工的信息,对不对,所以就涉及到部门表和员工表来关联到一起进行查询了,好,那我们来建立这么两张表:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

#建表

#部门表

create table department(

id int,

name varchar(20)

);

#员工表,之前我们学过foreign key,强行加上约束关联,但是我下面这个表并没有直接加foreign key,这两个表我只是让它们在逻辑意义上有关系,并没有加foreign key来强制两表建立关系,为什么要这样搞,是有些效果要给大家演示一下

#所以,这两个表是不是先建立哪个表都行啊,如果有foreign key的话,是不是就需要注意表建立的顺序了。那我们来建表。

create table employee(

id int primary key auto_increment,

name varchar(20),

sex enum(‘male‘,‘female‘not null default ‘male‘,

age int,

dep_id int

);

#给两个表插入一些数据

insert into department values

(200,‘技术‘),

(201,‘人力资源‘),

(202,‘销售‘),

(203,‘运营‘); #注意这一条数据,在下面的员工表里面没有对应这个部门的数据

insert into employee(name,sex,age,dep_id) values

(‘egon‘,‘male‘,18,200),

(‘alex‘,‘female‘,48,201),

(‘wupeiqi‘,‘male‘,38,201),

(‘yuanhao‘,‘female‘,28,202),

(‘liwenzhou‘,‘male‘,18,200),

(‘jingliyang‘,‘female‘,18,204#注意这条数据的dep_id字段的值,这个204,在上面的部门表里面也没有对应的部门id。所以两者都含有一条双方没有涉及到的数据,这都是为了演示一下效果设计的昂

;

#查看表结构和数据

mysql> desc department;

+-------+-------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+-------+-------------+------+-----+---------+-------+

id int(11) | YES | | NULL | |

| name | varchar(20) | YES | | NULL | |

+-------+-------------+------+-----+---------+-------+

mysql> desc employee;

+--------+-----------------------+------+-----+---------+----------------+

| Field | Type | Null | Key | Default | Extra |

+--------+-----------------------+------+-----+---------+----------------+

id int(11) | NO | PRI | NULL | auto_increment |

| name | varchar(20) | YES | | NULL | |

| sex | enum(‘male‘,‘female‘) | NO | | male | |

| age | int(11) | YES | | NULL | |

| dep_id | int(11) | YES | | NULL | |

+--------+-----------------------+------+-----+---------+----------------+

mysql> select * from department;

+------+--------------+

id | name |

+------+--------------+

200 | 技术 |

201 | 人力资源 |

202 | 销售 |

203 | 运营 |

+------+--------------+

mysql> select * from employee;

+----+------------+--------+------+--------+

id | name | sex | age | dep_id |

+----+------------+--------+------+--------+

1 | egon | male | 18 200 |

2 | alex | female | 48 201 |

3 | wupeiqi | male | 38 201 |

4 | yuanhao | female | 28 202 |

5 | liwenzhou | male | 18 200 |

6 | jingliyang | female | 18 204 |

+----+------------+--------+------+--------+

二.多表连接查询


1

2

3

4

5

#重点:外链接语法

SELECT 字段列表

    FROM 表1 INNER|LEFT|RIGHT JOIN 表2

    ON 表1.字段 = 2.字段;

  1、交叉连接:不适用任何匹配条件。生成笛卡尔积

  补充一点:select 查询表的时候,后面可以跟多张表一起查询:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

mysql> select * from department,employee; #表用逗号分隔,看我查询时表的顺序,先department后employee,所以你看结果表的这些字段,是不是就是我们两个表字段并且哪个表在前面,哪个表的字段就在前面

+------+--------------+----+------------+--------+------+--------+

id   | name         | id | name       | sex    | age  | dep_id |

+------+--------------+----+------------+--------+------+--------+

|  200 | 技术         |  1 | egon       | male   |   18 |    200 |

|  201 | 人力资源     |  1 | egon       | male   |   18 |    200 |

|  202 | 销售         |  1 | egon       | male   |   18 |    200 |

|  203 | 运营         |  1 | egon       | male   |   18 |    200 |

|  200 | 技术         |  2 | alex       | female |   48 |    201 |

|  201 | 人力资源     |  2 | alex       | female |   48 |    201 |

|  202 | 销售         |  2 | alex       | female |   48 |    201 |

|  203 | 运营         |  2 | alex       | female |   48 |    201 |

|  200 | 技术         |  3 | wupeiqi    | male   |   38 |    201 |

|  201 | 人力资源     |  3 | wupeiqi    | male   |   38 |    201 |

|  202 | 销售         |  3 | wupeiqi    | male   |   38 |    201 |

|  203 | 运营         |  3 | wupeiqi    | male   |   38 |    201 |

|  200 | 技术         |  4 | yuanhao    | female |   28 |    202 |

|  201 | 人力资源     |  4 | yuanhao    | female |   28 |    202 |

|  202 | 销售         |  4 | yuanhao    | female |   28 |    202 |

|  203 | 运营         |  4 | yuanhao    | female |   28 |    202 |

|  200 | 技术         |  5 | liwenzhou  | male   |   18 |    200 |

|  201 | 人力资源     |  5 | liwenzhou  | male   |   18 |    200 |

|  202 | 销售         |  5 | liwenzhou  | male   |   18 |    200 |

|  203 | 运营         |  5 | liwenzhou  | male   |   18 |    200 |

|  200 | 技术         |  6 | jingliyang | female |   18 |    204 |

|  201 | 人力资源     |  6 | jingliyang | female |   18 |    204 |

|  202 | 销售         |  6 | jingliyang | female |   18 |    204 |

|  203 | 运营         |  6 | jingliyang | female |   18 |    204 |

+------+--------------+----+------------+--------+------+--------+

24 rows in set (0.12 sec)

我们让employee表在前面看看结果,注意看结果表的字段

mysql> select * from employee,department;

+----+------------+--------+------+--------+------+--------------+

id | name | sex | age | dep_id | id | name |

+----+------------+--------+------+--------+------+--------------+

1 | egon | male | 18 200 200 | 技术 |

1 | egon | male | 18 200 201 | 人力资源 |

1 | egon | male | 18 200 202 | 销售 |

1 | egon | male | 18 200 203 | 运营 |

2 | alex | female | 48 201 200 | 技术 |

2 | alex | female | 48 201 201 | 人力资源 |

2 | alex | female | 48 201 202 | 销售 |

2 | alex | female | 48 201 203 | 运营 |

3 | wupeiqi | male | 38 201 200 | 技术 |

3 | wupeiqi | male | 38 201 201 | 人力资源 |

3 | wupeiqi | male | 38 201 202 | 销售 |

3 | wupeiqi | male | 38 201 203 | 运营 |

4 | yuanhao | female | 28 202 200 | 技术 |

4 | yuanhao | female | 28 202 201 | 人力资源 |

4 | yuanhao | female | 28 202 202 | 销售 |

4 | yuanhao | female | 28 202 203 | 运营 |

5 | liwenzhou | male | 18 200 200 | 技术 |

5 | liwenzhou | male | 18 200 201 | 人力资源 |

5 | liwenzhou | male | 18 200 202 | 销售 |

5 | liwenzhou | male | 18 200 203 | 运营 |

6 | jingliyang | female | 18 204 200 | 技术 |

6 | jingliyang | female | 18 204 201 | 人力资源 |

6 | jingliyang | female | 18 204 202 | 销售 |

6 | jingliyang | female | 18 204 203 | 运营 |

+----+------------+--------+------+--------+------+--------------+

24 rows in set (0.00 sec)

关于笛卡儿积:我们看一下上面的这些数据,有什么发现,首先看到这些字段都显示出来了,并且数据变得很多,我们来看一下,这么多条数据都是怎么来的,为什么会出现这么条数据,笛卡儿积这是一个数据名词,你可以去研究研究~~

  因为我们要进行连表查询,那么mysql并不知道你想要如何连接两个表的关系进行查询,那么mysql会将你两个表数据的所有组合关系都给你拼接成一条数据来显示,这样你就可以想查哪个关联关系的数据就查哪个了,如果还是不太理解看一下下面的图:

  

  关于笛卡儿积现象的解释图:

    

  

    咱们为了更好的管理数据,为了节省空间,为了数据组织结构更清晰,将数据拆分到了不同表里面,但是本质上是不是还是一份数据,一份重复内容很多的很大的数据,所以我们即便是分表了,但是咱们是不是还需要找到一个方案把两个本来分开的表能够合并到一起来进行查询,那你是不是就可以根据部门找员工,根据员工找部门了,对不对,但是我们合并两个表的时候,如何合并,根据什么来合并,通过笛卡儿积这种合并有没有浪费,我们其实想做的是不是说我们的员工表中dep_id这个字段中的数据和部门表里面的id能够对应上就可以了,因为我们知道我们设计表的时候,是通过这两个字段来给两个表建立关系的,对不对,看下图:

    

    我们的目标就是将两个分散出去的表,按照两者之间有关系的字段,能对应上的字段,把两者合并成一张表,这就是多表查询的一个本质。那么笛卡儿积干了什么事儿,就是简单粗暴的将两个表的数据全部对应了一遍,用处就是什么呢,它肯定就能保证有一条是对应准的,你需要做的事情就是在笛卡儿积的基础上只过滤出我们需要的那些数据就行了,笛卡儿积不是咱们最终要得到的结果,只是给你提供了一个基础,它不管对应的对不对,全部给你对应一遍,然后你自己去筛选就可以了,然后基于笛卡儿积我们来找一下对应的数据,看看能不能找到:

  2、内连接:只连接匹配的行


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

#我们要找的数据就是员工表里面dep_id字段的值和部门表里面id字段的值能对应上的那些数据啊,所以你看下面的写法:

mysql> select * from employee,department where employee.dep_id=department.id;

+----+-----------+--------+------+--------+------+--------------+

id | name      | sex    | age  | dep_id | id   | name         |

+----+-----------+--------+------+--------+------+--------------+

|  1 | egon      | male   |   18 |    200 |  200 | 技术         |

|  2 | alex      | female |   48 |    201 |  201 | 人力资源     |

|  3 | wupeiqi   | male   |   38 |    201 |  201 | 人力资源     |

|  4 | yuanhao   | female |   28 |    202 |  202 | 销售         |

|  5 | liwenzhou | male   |   18 |    200 |  200 | 技术         |

+----+-----------+--------+------+--------+------+--------------+

5 rows in set (0.14 sec)

拿到了我们想要的结果。

但是你看,我们左表employee表中的dep_id为204的那个数据没有了,右表department表的id203的数据没有了,因为我们现在要的就是两表能对应上的数据一起查出来,那个204203双方对应不上。

#再看一个需求,我要查出技术部的员工的名字

mysql> select name from employee,department where employee.dep_id=department.id and department.name=‘技术‘;

ERROR 1052 (23000): Column ‘name‘ in field list is ambiguous

#上面直接就报错了,因为select后面直接写的name,在两个表合并起来的表中,是有两个name字段的,直接写name是不行的,要加上表名,再看:

mysql> select employee.name from employee,department where employee.dep_id=department.id and department.name=‘技术‘;

+-----------+

| name      |

+-----------+

| egon      |

| liwenzhou |

+-----------+

2 rows in set (0.09 sec)

结果就没问题了

  但是你看上面的代码有没有什么不太好的地方,虽然我们能够完成我们的事情,但是代码可读性不好,所以以后不要这么写,但是看图:

    

    所以mysql为我们提供了一些专门做连表操作的方法,这些方法语义更加的明确,你一看就知道那些代码是连表的,那些代码是查询的,其实上面的连表也是个查询操作,但是我们为了区分明确,连表专门用连表的方法,查询就专门用查询的方法。那这些专门的方法都是什么呢,看后面的内容:

  3 、外链接之左连接:优先显示左表全部记录


1

2

3

4

5

6

7

8

9

10

11

12

13

#以左表为准,即找出所有员工信息,当然包括没有部门的员工

#本质就是:在内连接的基础上增加左边有右边没有的结果  #注意语法:

mysql> select employee.id,employee.name,department.name as depart_name from employee left join department on employee.dep_id=department.id;

+----+------------+--------------+

id | name       | depart_name  |

+----+------------+--------------+

|  1 | egon       | 技术         |

|  5 | liwenzhou  | 技术         |

|  2 | alex       | 人力资源     |

|  3 | wupeiqi    | 人力资源     |

|  4 | yuanhao    | 销售         |

|  6 | jingliyang | NULL         |

+----+------------+--------------+

  4 、外链接之右连接:优先显示右表全部记录


1

2

3

4

5

6

7

8

9

10

11

12

13

#以右表为准,即找出所有部门信息,包括没有员工的部门

#本质就是:在内连接的基础上增加右边有左边没有的结果

mysql> select employee.id,employee.name,department.name as depart_name from employee right join department on employee.dep_id=department.id;

+------+-----------+--------------+

id   | name      | depart_name  |

+------+-----------+--------------+

|    1 | egon      | 技术         |

|    2 | alex      | 人力资源     |

|    3 | wupeiqi   | 人力资源     |

|    4 | yuanhao   | 销售         |

|    5 | liwenzhou | 技术         |

| NULL | NULL      | 运营         |

+------+-----------+--------------+

  5 、全外连接:显示左右两个表全部记录


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

全外连接:在内连接的基础上增加左边有右边没有的和右边有左边没有的结果

#注意:mysql不支持全外连接 full JOIN

#强调:mysql可以使用此种方式间接实现全外连接

select * from employee left join department on employee.dep_id = department.id

union

select * from employee right join department on employee.dep_id = department.id

;

#查看结果

+------+------------+--------+------+--------+------+--------------+

id   | name       | sex    | age  | dep_id | id   | name         |

+------+------------+--------+------+--------+------+--------------+

|    1 | egon       | male   |   18 |    200 |  200 | 技术         |

|    5 | liwenzhou  | male   |   18 |    200 |  200 | 技术         |

|    2 | alex       | female |   48 |    201 |  201 | 人力资源     |

|    3 | wupeiqi    | male   |   38 |    201 |  201 | 人力资源     |

|    4 | yuanhao    | female |   28 |    202 |  202 | 销售         |

|    6 | jingliyang | female |   18 |    204 | NULL | NULL         |

| NULL | NULL       | NULL   | NULL |   NULL |  203 | 运营         |

+------+------------+--------+------+--------+------+--------------+

#注意 union与union all的区别:union会去掉相同的纪录,因为union all是left join 和right join合并,所以有重复的记录,通过union就将重复的记录去重了。

  

三.符合条件连接查询


1

2

3

4

5

6

7

8

9

10

#示例1:以内连接的方式查询employee和department表,并且employee表中的age字段值必须大于25,即找出年龄大于25岁的员工以及员工所在的部门

select employee.name,department.name from employee inner join department

    on employee.dep_id = department.id

    where age > 25;

#示例2:以内连接的方式查询employee和department表,并且以age字段的升序方式显示

select employee.id,employee.name,employee.age,department.name from employee,department

    where employee.dep_id = department.id

    and age > 25

    order by age asc;

四.子查询

  子查询其实就是将你的一个查询结果用括号括起来,这个结果也是一张表,就可以将它交给另外一个sql语句,作为它的一个查询依据来进行操作。

  来,我们简单来个需求:技术部都有哪些员工的姓名,都显示出来: 1、看一下和哪个表有关,然后from找到两个表  2、进行一个连表操作 3、基于连表的结果来一个过滤就可以了


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

#我们之前的做法是:先连表

mysql> select * from employee inner join department on employee.dep_id = department.id;

+----+-----------+--------+------+--------+------+--------------+

id | name      | sex    | age  | dep_id | id   | name         |

+----+-----------+--------+------+--------+------+--------------+

|  1 | egon      | male   |   18 |    200 |  200 | 技术         |

|  2 | alex      | female |   48 |    201 |  201 | 人力资源     |

|  3 | wupeiqi   | male   |   38 |    201 |  201 | 人力资源     |

|  4 | yuanhao   | female |   28 |    202 |  202 | 销售         |

|  5 | liwenzhou | male   |   18 |    200 |  200 | 技术         |

+----+-----------+--------+------+--------+------+--------------+

5 rows in set (0.10 sec)

#然后根据连表的结果进行where过滤,将select*改为select employee.name

mysql> select employee.name from employee inner join department on employee.dep_id = department.id where department.name=‘技术‘;

  +-----------+

  | name |

  +-----------+

  | egon |

  | liwenzhou |

  +-----------+

  2 rows in set (0.09 sec)

  然后看一下子查询这种方式的写法:它的做法就是解决完一个问题,再解决下一个问题,针对我们上面的需求,你想,我们的需求是不是说找技术部门下面有哪些员工对不对,如果你直接找员工表,你能确定哪个dep_id的数值表示的是技术部门吗,不能,所以咱们是不是应该先确定一个技术部门对应的id号是多少,然后根据部门的id号,再去员工表里面查询一下dep_id为技术部门对应的部门表的那个id号的所有的员工表里面的记录:好,那我们看一下下面的操作


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

#首先从部门表里面找到技术部门对应的id

mysql> select id from department where name=‘技术‘;

+------+

id   |

+------+

|  200 |

+------+

1 row in set (0.00 sec)

#那我们把上面的查询结果用括号括起来,它就表示一条id=200的数据,然后我们通过员工表来查询dep_id=这条数据作为条件来查询员工的name

mysql> select name from employee where dep_id = (select id from department where name=‘技术‘);

+-----------+

| name      |

+-----------+

| egon      |

| liwenzhou |

+-----------+

2 rows in set (0.00 sec)

上面这些就是子查询的一个思路,解决一个问题,再解决另外一个问题,你子查询里面可不可以是多个表的查询结果,当然可以,然后再通过这个结果作为依据来进行过滤,然后我们学一下子查询里面其他的内容,往下学。

  


1

2

3

4

5

子查询:

#1:子查询是将一个查询语句嵌套在另一个查询语句中。

#2:内层查询语句的查询结果,可以为外层查询语句提供查询条件。

#3:子查询中可以包含:IN、NOT IN、ANY、ALL、EXISTS 和 NOT EXISTS等关键字

#4:还可以包含比较运算符:= 、 !=、> 、<等

  1、带IN关键字的子查询


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

#查询员工平均年龄在25岁以上的部门名,可以用连表,也可以用子查询,我们用子查询来搞一下

select id,name from department

    where id in

        (select dep_id from employee group by dep_id having avg(age) > 25);

#连表来搞一下上面这个需求

select department.name from department inner join employee on department.id=employee.dep_id

    group by department.name

    having avg(age)>25;

总结:子查询的思路和解决问题一样,先解决一个然后拿着这个的结果再去解决另外一个问题,连表的思路是先将两个表关联在一起,然后在进行group by啊过滤啊等等操作,两者的思路是不一样的

#查看技术部员工姓名

select name from employee

    where dep_id in

        (select id from department where name=‘技术‘);

#查看不足1人的部门名(子查询得到的是有人的部门id)

select name from department where id not in (select distinct dep_id from employee);

  2、带比较运算符的子查询


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#比较运算符:=、!=、>、>=、<、<=、<>

#查询大于所有人平均年龄的员工名与年龄

mysql> select name,age from emp where age > (select avg(age) from emp);

+---------+------+

| name | age |

+---------+------+

| alex | 48 |

| wupeiqi | 38 |

+---------+------+

2 rows in set (0.00 sec)

#查询大于部门内平均年龄的员工名、年龄

select t1.name,t1.age from emp t1

inner join

(select dep_id,avg(age) avg_age from emp group by dep_id) t2

on t1.dep_id = t2.dep_id

where t1.age > t2.avg_age;

  3、带EXISTS关键字的子查询

    EXISTS关字键字表示存在。在使用EXISTS关键字时,内层查询语句不返回查询的记录。而是返回一个真假值。True或False
    当返回True时,外层查询语句将进行查询;当返回值为False时,外层查询语句不进行查询。还可以写not exists,和exists的效果就是反的


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

#department表中存在dept_id=203,Ture

mysql> select * from employee

    ->     where exists 

    ->         (select id from department where id=200);

+----+------------+--------+------+--------+

id | name       | sex    | age  | dep_id |

+----+------------+--------+------+--------+

|  1 | egon       | male   |   18 |    200 |

|  2 | alex       | female |   48 |    201 |

|  3 | wupeiqi    | male   |   38 |    201 |

|  4 | yuanhao    | female |   28 |    202 |

|  5 | liwenzhou  | male   |   18 |    200 |

|  6 | jingliyang | female |   18 |    204 |

+----+------------+--------+------+--------+

#department表中存在dept_id=205,False

mysql> select * from employee

    ->     where exists

    ->         (select id from department where id=204);

Empty set (0.00 sec)

原文地址:https://www.cnblogs.com/a2534786642/p/10321666.html

时间: 2024-10-09 12:20:35

Mysql数据库多表查询的相关文章

Mysql数据库单表查询

1.单表查询语法 #查询数据的本质:mysql会到你本地的硬盘上找到对应的文件,然后打开文件,按照你的查询条件来找出你需要的数据.下面是完整的一个单表查询的语法 select * from,这个select * 指的是要查询所有字段的数据. SELECT distinct 字段1,字段2... FROM 库名.表名 #from后面是说从库的某个表中去找数据,mysql会去找到这个库对应的文件夹下去找到你表名对应的那个数据文件,找不到就直接报错了,找到了就继续后面的操作 WHERE 条件 #从表中

MySQL数据库 多表查询 交叉连接 自然连接 内连接 自连接 外连接 子查询 多表查询练习 单表查询练习 &#109806;

原文: http://blog.gqylpy.com/gqy/466 置顶:来自一名75后老程序员的武林秘籍--必读(博主推荐) 来,先呈上武林秘籍链接:http://blog.gqylpy.com/gqy/401/ 你好,我是一名极客!一个 75 后的老工程师! 我将花两分钟,表述清楚我让你读这段文字的目的! 如果你看过武侠小说,你可以把这个经历理解为,你失足落入一个山洞遇到了一位垂暮的老者!而这位老者打算传你一套武功秘籍! 没错,我就是这个老者! 干研发 20 多年了!我也年轻过,奋斗过!我

MySQL数据库 | 数据表-查询命令详细记录

本篇专门记录数据库增删改查中最常用.花招最多的 查. [文章结构] 一.数据的准备 二.基本的查询功能 三.条件查询 四.查询排序 五.聚合函数 六.分组查询 七.分页查询 八.连接查询 九.子查询 十.自关联 [正文] 一.数据的准备 首先创建一个数据库,以便后文命令的使用. -- 创建一个数据库 create database pysql charset=utf8; -- 使用数据库 use pysql; -- 查看当前使用的是哪个数据库 select database(); -- 创建数据

day15(mysql 的多表查询,事务)

mysql之多表查询 1.合并结果集 作用:合并结果集就是把两个select语句查询的结果连接到一起! /*创建表t1*/ CREATE TABLE t1( a INT PRIMARY KEY , b VARCHAR(10) ) INSERT INTO t1 VALUES(1,'a'); INSERT INTO t1 VALUES(2,'b'); INSERT INTO t1 VALUES(3,'c'); /*创建t2*/ CREATE TABLE t2( c INT PRIMARY KEY ,

MySQL数据库、表的字符编码

用MySQL命令行新建数据库和表时默认的字符编码是latin1,但是在实际开发过程中一般都是使用utf8格式的编码.操作如下: 1.修改数据库字符编码 mysql> alter database mydb character set utf8 ;2.创建数据库时,指定数据库的字符编码 mysql> create database mydb character set utf8 ;3.查看mysql数据库的字符编码 mysql> show variables like 'character

MySql数据库创建表

3.3.MySql数据库创建表 创建5个表: UserInfo用户基础表 Role 角色表 MenuInfo 菜单即控制表 Relation_Role_Menu 角色对应菜单关系表 RelaTion_User_Role  用户角色关系表 Depart 部门信息表 表名:USERINFO 用户信息表 序号 列名 数据类型 长度 小数位 标识 主键 允许空 默认值 说明 1 ID INT 是 否 主键 2 USER_NAME VARCHAR 100 是 用户姓名 3 USER_ID VARCHAR

sql语句备份/导入 mysql数据库或表命令

sql语句备份/导入 mysql数据库或表命令,布布扣,bubuko.com

跟王老师学MySQL:单表查询

跟王老师学MySQL:单表查询 主讲教师:王少华   QQ群号:483773664 学习内容 查询所有字段 查询指定字段 查询指定记录 带in关键字的查询 带between and关键字的查询 带like关键字的查询 查询空值 带and的多条件查询 带or的多条件查询 查询不重复记录 对查询结果进行排序 单表查询是指从一张表中查询所需要的数据.查询数据时,可以从一张表中查询数据,也可以从多张表中同时查询数据.两者的查询方式上有一定的区别.因为单表查询只在一张表上进行操作,所以查询比较简单. 一.

分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)

         分页查询信息       使用jdbc连接mysql数据库实现分页查询任务 通过mysql数据库提供的分页机制,实现商品信息的分页查询功能,将查询到的信息显示到jsp页面上. 本项目时一个简单的运用eclipse+jdbc+mysql的小程序. 连接的数据库名称为db_database11,属性如下: 1.创建名为com.pmf.bean的包,包中是名为Product的类,用于封装商品信息. 全部代码如下: package com.pmf.bean; /** * 商品 * */