数据库基础使用

时间:2022-07-26
本文章向大家介绍数据库基础使用,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1. having和where的区别

  • having是对查询的结果集进行操作比较的
  • where是对所有字段进行比较的
# having 和 where 都可以使用的场景

select name,age from person where age > 18
select name,age from person having age> 18
# 也可以换成写法  
select name,age from person where 1=1 having age>18

# 只能用where 不能用having的情况  
select name,age from person where pay > 5000

# 只能用having  不能用where的情况 因为数据表中没有avg字段所有不能用where 这里说明了having是作用用结果集的
select name,avg(age) as avg from person having avg>18

2. mysql之关联查询

测试数据
CREATE TABLE `a_table` (
  `a_id` int(11) DEFAULT NULL,
  `a_name` varchar(10) DEFAULT NULL,
  `a_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

insert into a_table values(1,"老潘","总裁部"),(2,"老王","秘书部"),(3,"老张","设计部"),(4,"老李","运营部");
select * from a_table;


create table `b_table` (
`b_id` int(11) DEFAULT NULL,
`b_name` varchar(10) DEFAULT NULL,
`b_part` varchar(10) DEFAULT NULL
)ENGINE = INNODB DEFAULT CHARSET = utf8;

insert into b_table values(2,"老王","秘书部"),(3,"老张","设计部"),(5,"老刘","人事部"),(6,"老黄","生产部");
select * from b_table;
内连接 (组合两张表,去公共部分作为结果)
  • inner join ….on
  • join …. on
  • cross join … on
mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part    |
+------+--------+-----------+
|    1 | 老潘   | 总裁部    |
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    4 | 老李   | 运营部    |
+------+--------+-----------+
4 rows in set (0.00 sec)


mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part    |
+------+--------+-----------+
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    5 | 老刘   | 人事部    |
|    6 | 老黄   | 生产部    |
+------+--------+-----------+
4 rows in set (0.00 sec)


# 内连接
mysql> select * from a_table a inner join b_table b on a.a_id=b.b_id;
+------+--------+-----------+------+--------+-----------+
| a_id | a_name | a_part    | b_id | b_name | b_part    |
+------+--------+-----------+------+--------+-----------+
|    2 | 老王   | 秘书部    |    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |    3 | 老张   | 设计部    |
+------+--------+-----------+------+--------+-----------+
2 rows in set (0.02 sec)

# 同时可以使用以下的三种方法:
mysql> select * from a_table, b_table where a_table.a_id = b_table.b_id;

mysql> select * from a_table a cross join b_table b on a.a_id=b.b_id;

mysql> select * from a_table a  join b_table b on a.a_id=b.b_id;
右连接 和左连接相反
union 取两个表结果的并集(两表想加去重)
mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part    |
+------+--------+-----------+
|    1 | 老潘   | 总裁部    |
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    4 | 老李   | 运营部    |
+------+--------+-----------+
4 rows in set (0.00 sec)


mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part    |
+------+--------+-----------+
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    5 | 老刘   | 人事部    |
|    6 | 老黄   | 生产部    |
+------+--------+-----------+
4 rows in set (0.00 sec)




mysql> select * from a_table union  select * from b_table;
+------+--------+-----------+
| a_id | a_name | a_part    |
+------+--------+-----------+
|    1 | 老潘   | 总裁部    |
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    4 | 老李   | 运营部    |
|    5 | 老刘   | 人事部    |
|    6 | 老黄   | 生产部    |
+------+--------+-----------+
6 rows in set (0.00 sec)
unin all 两个表相加(不去重 结果以先表在前的方式显示)
mysql> select * from a_table;
+------+--------+-----------+
| a_id | a_name | a_part    |
+------+--------+-----------+
|    1 | 老潘   | 总裁部    |
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    4 | 老李   | 运营部    |
+------+--------+-----------+
4 rows in set (0.00 sec)


mysql> select * from b_table;
+------+--------+-----------+
| b_id | b_name | b_part    |
+------+--------+-----------+
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    5 | 老刘   | 人事部    |
|    6 | 老黄   | 生产部    |
+------+--------+-----------+
4 rows in set (0.00 sec)




mysql> select * from a_table union all select * from b_table;
+------+--------+-----------+
| a_id | a_name | a_part    |
+------+--------+-----------+
|    1 | 老潘   | 总裁部    |
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    4 | 老李   | 运营部    |
|    2 | 老王   | 秘书部    |
|    3 | 老张   | 设计部    |
|    5 | 老刘   | 人事部    |
|    6 | 老黄   | 生产部    |
+------+--------+-----------+
8 rows in set (0.00 sec)

3. mysql对查询速度的检测,检查是否存在索引