当前位置: 首页 > news >正文

SQL与关系数据库基本操作

SQL与关系数据库基本操作

文章目录

  • 第一节 SQL概述
    • 一、SQL的发展
    • 二、SQL的特点
    • 三、SQL的组成
  • 第二节 MySQL预备知识
    • 一、MySQL使用基础
    • 二、MySQL中的SQL
      • 1、常量
        • (1)字符串常量
        • (2)数值常量
        • (3)十六进制常量
        • (4)日期时间常量
        • (5)位字段值(了解)
        • (6)布尔值
        • (7)NULL值
      • 2、变量
      • 3、运算符
      • 4、表达式
      • 5、内置函数
  • 第三节 数据定义
    • 一、数据库模式定义
      • 1、创建数据库
      • 2、选择数据库
      • 3、修改数据库
      • 4、删除数据库
      • 5、查看数据库
    • 二、表定义
      • 1、创建表
      • 2、添加字段
      • 3、修改字段
      • 4、删除字段
      • 5、重命名表
      • 6、删除表
      • 7、查看表
      • 8、查看表结构
    • 三、索引定义
      • 1、索引的创建
      • 2、索引的查看
      • 3、索引的删除
  • 第四节 数据更新
    • 一、插入数据
    • 二、删除数据
    • 三、修改数据
  • 第五节 数据查询
    • 一、SELECT语句
    • 二、列的选择与指定
      • 1、选择指定的列
      • 2、定义并使用列的别名
      • 3、替换查询结果集中的数据
      • 4、计算列值
      • 5、聚合函数
    • 三、FROM子句与多表连接查询
      • 1、交叉连接
      • 2、内连接
      • 3、外连接
        • (1)左连接
        • (2)右连接
    • 四、WHERE子句与条件查询
    • 五、GROUP BY子句与分组数据
    • 六、HAVING子句
    • 七、ORDER BY子句
    • 八、LIMIT子句
  • 第六节 视图
    • 一、创建视图
    • 二、删除视图
    • 三、修改视图定义
    • 四、查看视图定义
    • 五、更新视图数据
    • 六、查询视图数据
  • 附上`mydata.sql`


第一节 SQL概述

一、SQL的发展

结构化查询语言(Structured Query Language,简称SQL)是一种介于关系代数和关系演算之间的语言。由于具有语言简洁、方便实用、功能齐全等优点,很快得到推广和应用。随着关系数据库的流行,SQL语言最终发展成为关系数据库的标准语言和数据库领域中一个主流语言。SQL已经被ANSI(美国国家标准化组织)确定为数据库系统的工业标准,它是数据库系统的通用语言。利用SQL,用户可以用几乎相同的语句在不同的数据库系统上执行同样的操作。MySQL利用SQL对数据库进行操作,此外SQL语言不区分大小写

二、SQL的特点

​ 1、SQL不是某个特定数据库供应商专有的语言。几乎所有重要的关系数据库管理系统都支持SQL,所以掌握SQL可以帮助用户与几乎所有的关系数据库进行交互。
​ 2、SQL简单易学。它的语句全都是由具有很强描述性的英语单词所组成,而且这些单词的数目不多。

​ 3、SQL尽管看上去很简单,但它实际上是一种强有力的语言,灵活使用其语言元素,可以进行非常复杂和高级的数据库操作。

三、SQL的组成

​ 1、数据定义语言(Data Definition Language,DDL)

​ 2、数据操纵语言(Data Manipulation Language,DML)

​ 3、数据控制语言(Data Control Language,DCL)

​ 4、嵌入式和动态SQL规则

​ 5、SQL调用和会话规则

第二节 MySQL预备知识

一、MySQL使用基础

​ 1、LAMP(Linux+Apache+ MySQL+PHP/Perl/Python),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库管理系统,PHP、Perl或Python语言作为服务器端脚本解释器。

​ 2、WAMP(Windows+Apache+MySQL+PHP/Perl/Python),即使用Windows系统,Apache作为Web服务器,MySQL作为数据库管理系统,PHP、Perl或Python语言作为服务器端脚本解释器。

二、MySQL中的SQL

在这里插入图片描述

图4.1 MySQL中的SQL对关系数据库模式的支持

1、常量

(1)字符串常量

​ 字符串是指用单引号或双引号括起来的字符序列,分为ASCII字符串常量(一个字节)和Unicode字符串常量(两个字节)。

​ ASCII例如:‘hello’, ‘How are you!’

​ Unicode字符串常量与ASCII字符串常量相似,但它前面有一个N标志,例如:N’hello’。

mysql> select 'hello';
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.02 sec)mysql> select "hello";
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.03 sec)mysql> select N'hello';
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.04 sec)mysql> select N"hello";
1054 - Unknown column 'N' in 'field list'     -- 使用双引号会报错
mysql> 
(2)数值常量

​ 数值常量可以分为整数常量浮点数常量

​ 整数常量即不带小数点的十进制数,例如:1894,2,+145345234,-2147483648。

​ 浮点数常量是使用小数点的数值常量,例如:5.26,-1.39,101.5E5,0.5E-2。

mysql> select 12345.6789;
+------------+
| 12345.6789 |
+------------+
| 12345.6789 |
+------------+
1 row in set (0.04 sec)mysql> select 12345;
+-------+
| 12345 |
+-------+
| 12345 |
+-------+
1 row in set (0.04 sec)mysql> select 12345e-3;
+----------+
| 12345e-3 |
+----------+
|   12.345 |
+----------+
1 row in set (0.04 sec)mysql> 
(3)十六进制常量

​ MySQL支持十六进制值。一个十六进制值通常指定为一个字符串常量,每对十六进制数字被转换为一个字符,其最前面有一个大写字母“X”或小写字母“x”。在引号中只可以使用数字“0”到“9”及字母“a”到“f”或“A”到“F”。例如:X’41’表示大写字母A。x’4D7953514C’表示字符串MySQL。

mysql> select X'41';
+-------+
| X'41' |
+-------+
| A     |
+-------+
1 row in set (0.02 sec)mysql> select X'4D7953514C';
+---------------+
| X'4D7953514C' |
+---------------+
| MySQL         |
+---------------+
1 row in set (0.03 sec)mysql> 

​ 十六进制数值不区分大小写,其前缀“X”或“x”可以被“0x”取代而且不用引号。及X’41’可以替换为0x41。

41=4*16^1+1*16^0=65

​ 注意:“0x”中x一定要小写。

​ 十六进制值的默认类型是字符串。如果向要确保该值作为数字处理,可以使用CAST(…AS UNSIGNED)。

(4)日期时间常量

​ 日期时间常量:用单引号将表示日期时间的字符串括起来构成。

​ 日期型常量包括年、月、日,数据类型为DATE,表示为"1999-06-17"这样的值。

​ 时间型常量包括小时数、分钟数、秒数及微秒数,数据类型为TIME,表示为“12:30:43.00013”这样的值。

mysql> select '2023-10-04';
+------------+
| 2023-10-04 |
+------------+
| 2023-10-04 |
+------------+
1 row in set (0.02 sec)mysql> select '2023-10-04 11:08:30';
+---------------------+
| 2023-10-04 11:08:30 |
+---------------------+
| 2023-10-04 11:08:30 |
+---------------------+
1 row in set (0.03 sec)mysql> 
(5)位字段值(了解)

​ 可以使用b’value’符号写位字段值。value是一个用0和1写成的二进制值。直接显示b’value’的值可能是一系列特殊的符号。

​ 例如:b’0’显示位空白,b’1’显示位一个图案。

mysql> select b'1';
+------+
| b'1' |
+------+
|     |
+------+
1 row in set (0.04 sec)mysql> select b'111';
+--------+
| b'111' |
+--------+
|       |
+--------+
1 row in set (0.04 sec)mysql> 
(6)布尔值

​ 布尔值只包含两个可能的值:TRUEFALSE。FALSE的数字值为“0”,TRUE的数字值为“1”。

mysql> select true;
+------+
| TRUE |
+------+
|    1 |
+------+
1 row in set (0.03 sec)mysql> select 1;
+---+
| 1 |
+---+
| 1 |
+---+
1 row in set (0.04 sec)mysql> select false;
+-------+
| FALSE |
+-------+
|     0 |
+-------+
1 row in set (0.03 sec)mysql> 
(7)NULL值

​ NULL值可适用于各种列类型,它通常用来表示“没有值”、“无数据”等意义,并且不同于数字类型的“0”或字符串类型的空字符串。

mysql> select NULL;
+------+
| NULL |
+------+
| NULL |
+------+
1 row in set (0.02 sec)mysql> 

2、变量

​ 用户可以在表达式中使用自己定义的变量,这样的变量叫作用户变量

​ 用户可以先在用户变量中保存值,然后在以后引用它这样可以将值从一个语句传递到另一个语句,在使用用户变量前必须定义和初始化。如果使用没有初始化的变量,它的值为NULL。

​ 用户变量前加**@**用来区分列名。

​ 必须在系统变量前加两个@

mysql> set @a=1;
Query OK, 0 rows affected (0.00 sec)mysql> select @1;
+------+
| @1   |
+------+
| NULL |
+------+
1 row in set (0.03 sec)mysql> select @a+1;
+------+
| @a+1 |
+------+
|    2 |
+------+
1 row in set (0.04 sec)mysql> set @b;
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
mysql> select @b;
+------+
| @b   |
+------+
| NULL |
+------+
1 row in set (0.05 sec)mysql> 

3、运算符

​ (1)算术运算符在两个表达式上执行数学运算,这两个表达式可以是任何数字数据类型。算术运算符有:+(加)、-(减)、*(乘)、/(除)和%(求模)5种运算。

mysql> select @a;
+----+
| @a |
+----+
|  1 |
+----+
1 row in set (0.01 sec)mysql> select @a+5;
+------+
| @a+5 |
+------+
|    6 |
+------+
1 row in set (0.02 sec)-- 加减乘除都一样,重点来看一下求模mysql> select 7%3;
+-----+
| 7%3 |
+-----+
|   1 |
+-----+
1 row in set (0.04 sec)mysql> 

​ (2)位运算符有:&(位与)、|(位或)、^(位异或)、~(位取反)、>>(位右移)、<<(位左移)。

mysql> select 5&1;
+-----+
| 5&1 |
+-----+
|   1 |
+-----+
1 row in set (0.02 sec)mysql> select 5|1;
+-----+
| 5|1 |
+-----+
|   5 |
+-----+
1 row in set (0.03 sec)mysql> select ~1;
+----------------------+
| ~1                   |
+----------------------+
| 18446744073709551614 |
+----------------------+
1 row in set (0.03 sec)mysql> select 5^1;
+-----+
| 5^1 |
+-----+
|   4 |
+-----+
1 row in set (0.05 sec)mysql> select 5>>1;
+------+
| 5>>1 |
+------+
|    2 |
+------+
1 row in set (0.06 sec)mysql> select 5<<1;
+------+
| 5<<1 |
+------+
|   10 |
+------+
1 row in set (0.07 sec)mysql> 

​ (3)比较运算符(又称关系运算符),用于比较两个表达式的值,其运算结果为逻辑值,可以为三种之一1(真)、0(假)及NULL(不能确定)

运算符含义运算符含义
=等于<=小于等于
>大于<>、!=不等于
<小于<=>相等或都等于空
>=大于等于
mysql> select 5>1;
+-----+
| 5>1 |
+-----+
|   1 |
+-----+
1 row in set (0.02 sec)mysql> select 5<1;
+-----+
| 5<1 |
+-----+
|   0 |
+-----+
1 row in set (0.03 sec)mysql> select 5=1;
+-----+
| 5=1 |
+-----+
|   0 |
+-----+
1 row in set (0.04 sec)mysql> select 5!=1;
+------+
| 5!=1 |
+------+
|    1 |
+------+
1 row in set (0.03 sec)mysql> select 5>=1;
+------+
| 5>=1 |
+------+
|    1 |
+------+
1 row in set (0.04 sec)mysql> 

​ (4)逻辑运算符

运算符运算规则运算符运算规则
NOT或!逻辑非OR或||逻辑或
AND或&&逻辑与XOR逻辑异或
mysql> select not (5>=1);
+------------+
| not (5>=1) |
+------------+
|          0 |
+------------+
1 row in set (0.02 sec)mysql> select 5>=1 && 6<=8;
+--------------+
| 5>=1 && 6<=8 |
+--------------+
|            1 |
+--------------+
1 row in set (0.03 sec)mysql> select 5>=1 and 6<=8;
+---------------+
| 5>=1 and 6<=8 |
+---------------+
|             1 |
+---------------+
1 row in set (0.04 sec)mysql> select 5>=1 and 6>8;
+--------------+
| 5>=1 and 6>8 |
+--------------+
|            0 |
+--------------+
1 row in set (0.06 sec)mysql> select 5>=1 or 6>8;
+-------------+
| 5>=1 or 6>8 |
+-------------+
|           1 |
+-------------+
1 row in set (0.06 sec)mysql> select 5>=1 xor 6>8;
+--------------+
| 5>=1 xor 6>8 |
+--------------+
|            1 |
+--------------+
1 row in set (0.06 sec)mysql> 

4、表达式

​ 表达式就是常量、变量、列名、复杂计算、运算符和函数的组合。一个表达式通常可以得到一个值。与常量和变量一样,表达式的值也具有某种数据类型,可能的数据类型有字符类型、数值类型、日期时间类型。这样,根据表达式的值的类型,表达式可分为字符型表达式、数值型表达式和日期表达式。

mysql> select 5+5.1;
+-------+
| 5+5.1 |
+-------+
| 10.1  |
+-------+
1 row in set (0.02 sec)mysql> select 5+'A';
+-------+
| 5+'A' |
+-------+
|     5 |
+-------+
1 row in set (0.02 sec)mysql> select 'b'+'A';
+---------+
| 'b'+'A' |
+---------+
|       0 |
+---------+
1 row in set (0.03 sec)mysql> select '2019-09-08'+1;
+----------------+
| '2019-09-08'+1 |
+----------------+
|           2020 |
+----------------+
1 row in set (0.06 sec)mysql> select '2019-09-08 12:00:00'+1;
+-------------------------+
| '2019-09-08 12:00:00'+1 |
+-------------------------+
|                    2020 |
+-------------------------+
1 row in set (0.04 sec)mysql> 

5、内置函数

例如:

函数类型示例
数学函数ABS()、SORT()
聚合函数COUNT()
字符串函数ASCI()、CHAR()
日期和时间函数NOW()、YEAR()
加密函数ENCODE()、ENCRYPT()
控制流程函数IF()、IFNULL()
格式化函数FORMAT()
类型转换函数CAST()
系统信息函数USER()、VERSION()
mysql> select abs(-10);
+----------+
| abs(-10) |
+----------+
|       10 |
+----------+
1 row in set (0.02 sec)mysql> select sqrt(16);
+----------+
| sqrt(16) |
+----------+
|        4 |
+----------+
1 row in set (0.03 sec)mysql> select ascii('A');
+------------+
| ascii('A') |
+------------+
|         65 |
+------------+
1 row in set (0.03 sec)mysql> select char(65);
+----------+
| char(65) |
+----------+
| A        |
+----------+
1 row in set (0.05 sec)mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2023-10-04 11:41:17 |
+---------------------+
1 row in set (0.02 sec)mysql> select year(now());
+-------------+
| year(now()) |
+-------------+
|        2023 |
+-------------+
1 row in set (0.02 sec)mysql> select month(now());
+--------------+
| month(now()) |
+--------------+
|           10 |
+--------------+
1 row in set (0.03 sec)mysql> select day(now());
+------------+
| day(now()) |
+------------+
|          4 |
+------------+
1 row in set (0.04 sec)mysql> select cast(X'41' as unsigned);
+-------------------------+
| cast(X'41' as unsigned) |
+-------------------------+
|                      65 |
+-------------------------+
1 row in set (0.02 sec)mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.03 sec)mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.26    |
+-----------+
1 row in set (0.04 sec)mysql> 

第三节 数据定义

一、数据库模式定义

1、创建数据库

​ 语法格式:

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_nme [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name

说明:语句中“[ ]”内为可选项。

db_name:数据库名

IF NO EXISTS:在建数据库前进行判断,只有该数据库目前尚不存在时才执行CREATE DATABASE操作。

DEFAULT:指定默认值

CHARACTER SET:指定数据库字符集(Charset)

charset_name:字符集名称。

COLLATE:指定字符集的校对规则,collation_name为校对规则名。

mysql> create database mydata;
Query OK, 1 row affected (0.01 sec)mysql> create database mydata;
1007 - Can't create database 'mydata'; database exists
mysql> create database IF NOT EXISTS mydata;
Query OK, 1 row affected (0.00 sec)mysql> 

2、选择数据库

USE db_name;
mysql> use mydata;
Database changed
mysql> 

3、修改数据库

​ 语法格式:

ALTER {DATABASE | SCHEMA} [db_name] alter_specification [,alter_specification] ...

其中alter_specification:[DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name

4、删除数据库

​ 语法格式:

DROP DATABASE [IF EXISTS] db_name

db_name是要删除的数据库名。可以使用IF EXISTS子句以避免删除不存在的数据库时出现MySQL错误信息。

mysql> drop database mydata;
Query OK, 0 rows affected (0.01 sec)mysql> drop database mydata;
1049 - Unknown database 'mydata'
mysql> drop database IF EXISTS mydata;
Query OK, 0 rows affected (0.00 sec)mysql> 

5、查看数据库

SHOW [DATABASE|SCHEMAS]
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.02 sec)mysql> 

二、表定义

数值类型
整数类型
浮点类型
INT
FLOAT DOUBLE DECIMAL
日期和时间类型
日期类型
日期时间类型
时间戳类型
DATE YYYY-MM-DD YEAR
DATETIME TIME
TIMESTAMP
字符串类型
固定长度类型
可变长度类型
文本类型
CHAR 最大长度255
VARCHAR 最大长度65535
TEXT

1、创建表

CREATE TABLE [IF NOT EXISTS] tbl_name(字段名1 数据类型[列级完整性约束条件][默认值][,字段名2 数据类型[列级完整性约束条件][默认值]][......][表级完整性约束])[ENGINE=引擎类型];
mysql> create database mydata;
Query OK, 1 row affected (0.00 sec)mysql> use mydata;
Database changed
mysql> create table student(-> Sno char(11) NOT NULL,-> Sname char(10) NOT NULL,-> Sage int-> );
Query OK, 0 rows affected (0.02 sec)-- 或者使用create table student(Sno char(11) NOT NULL,Sname char(10) NOT NULL,Sage int);进行创建mysql> 

2、添加字段

ALTER TABLE tb_name ADD [COLUMN] 新字段名 数据类型 [约束条件] [FIRST | AFTER 已有字段名]
mysql> alter table student add column Sbirthday datetime;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> 

3、修改字段

ALTER TABLE tb_name CHANGE [COLUMN] 原字段 新字段名 数据类型 [约束条件]ALTER TABLE tb_name ALTER [COLUMN] 字段名 {SET|DROP} DEFUALT;ALTER TABLE tb_name MODIFY [COLUMN] 字段名 数据类型 [约束条件] [FIRST | AFTER 已有字段名]
mysql> alter table student change column Sname Sname char(200);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> 

4、删除字段

ALTER TABLE tb_name DROP [COLUMN] 字段名;
mysql> alter table student drop column Sname;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> 

5、重命名表

ALTER TABLE 原表名 RENAME [TO] 新表名 RENAME TABLE 原表名1 TO 新表名1 [,原表名2 TO 新表名2]......;
mysql> show tables;
+------------------+
| Tables_in_mydata |
+------------------+
| student          |
| teacher          |
+------------------+
2 rows in set (0.03 sec)mysql> alter table teacher rename to my_teacher;
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
+------------------+
| Tables_in_mydata |
+------------------+
| my_teacher       |
| student          |
+------------------+
2 rows in set (0.05 sec)-- 修改方法2mysql> rename table my_teacher to teacher;
Query OK, 0 rows affected (0.00 sec)mysql> show tables;
+------------------+
| Tables_in_mydata |
+------------------+
| student          |
| teacher          |
+------------------+
2 rows in set (0.04 sec)mysql> 

6、删除表

DROP TABLE [IF EXISTS]1 [,表2]......;
mysql> drop table teacher;
Query OK, 0 rows affected (0.00 sec)mysql> 

7、查看表

SHOW TABLES[{FROM|IN} db_name];
mysql> show tables;
+------------------+
| Tables_in_mydata |
+------------------+
| student          |
+------------------+
1 row in set (0.07 sec)mysql> show tables in mysql;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| engine_cost               |
| event                     |
| func                      |
| general_log               |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
31 rows in set (0.10 sec)mysql> 

8、查看表结构

SHOW COLUMNS {FROM|IN} tb_name [{FROM|IN} db_name];
mysql> show columns in student;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| Sno       | char(11) | NO   |     | NULL    |       |
| Sage      | int(11)  | YES  |     | NULL    |       |
| Sbirthday | datetime | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
3 rows in set (0.04 sec)mysql> desc student;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| Sno       | char(11) | NO   |     | NULL    |       |
| Sage      | int(11)  | YES  |     | NULL    |       |
| Sbirthday | datetime | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
3 rows in set (0.05 sec)mysql> show columns in db in mysql;
+-----------------------+---------------+------+-----+---------+-------+
| Field                 | Type          | Null | Key | Default | Extra |
+-----------------------+---------------+------+-----+---------+-------+
| Host                  | char(60)      | NO   | PRI |         |       |
| Db                    | char(64)      | NO   | PRI |         |       |
| User                  | char(32)      | NO   | PRI |         |       |
| Select_priv           | enum('N','Y') | NO   |     | N       |       |
| Insert_priv           | enum('N','Y') | NO   |     | N       |       |
| Update_priv           | enum('N','Y') | NO   |     | N       |       |
| Delete_priv           | enum('N','Y') | NO   |     | N       |       |
| Create_priv           | enum('N','Y') | NO   |     | N       |       |
| Drop_priv             | enum('N','Y') | NO   |     | N       |       |
| Grant_priv            | enum('N','Y') | NO   |     | N       |       |
| References_priv       | enum('N','Y') | NO   |     | N       |       |
| Index_priv            | enum('N','Y') | NO   |     | N       |       |
| Alter_priv            | enum('N','Y') | NO   |     | N       |       |
| Create_tmp_table_priv | enum('N','Y') | NO   |     | N       |       |
| Lock_tables_priv      | enum('N','Y') | NO   |     | N       |       |
| Create_view_priv      | enum('N','Y') | NO   |     | N       |       |
| Show_view_priv        | enum('N','Y') | NO   |     | N       |       |
| Create_routine_priv   | enum('N','Y') | NO   |     | N       |       |
| Alter_routine_priv    | enum('N','Y') | NO   |     | N       |       |
| Execute_priv          | enum('N','Y') | NO   |     | N       |       |
| Event_priv            | enum('N','Y') | NO   |     | N       |       |
| Trigger_priv          | enum('N','Y') | NO   |     | N       |       |
+-----------------------+---------------+------+-----+---------+-------+
22 rows in set (0.15 sec)mysql> 

三、索引定义

​ 可以理解成目录,在查找时有目录查找速度会加快。
在这里插入图片描述

索引
用途划分
普通索引 INDEX
唯一索引 UNIQUE
主键 PRIMARY KEY
全文索引 FULLTEXT 引擎MyISAM
聚簇索引 引擎InnoDB
列级索引
单列索引
组合索引

1、索引的创建

CREATE TABLE tbl_name[col_name data_type][CONSTRAINT index_name][UNIQUE][INDEX|KEY][index_name](index_col_name[length])[ASC|DESC]-- ↓常用↓
CREATE INDEX
CREATE [UNIQUE] INDEX index_name ON tbl_name(col_name[(length)][ASC|DESC],......)
-- ↑常用↑ALTER TABLE
ALTER TABLE tbl_name ADD[UNIQUE|DULLTEXT][INDEX|KEY][index_name](col_name[length][ASC|DESC],......)
mysql> desc student;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| Sno       | char(11) | NO   |     | NULL    |       |
| Sage      | int(11)  | YES  |     | NULL    |       |
| Sbirthday | datetime | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
3 rows in set (0.04 sec)mysql> create index index_sage on student (Sage asc);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc student;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| Sno       | char(11) | NO   |     | NULL    |       |
| Sage      | int(11)  | YES  | MUL | NULL    |       |
| Sbirthday | datetime | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
3 rows in set (0.06 sec)mysql> 
-- 通过创建表时创建索引mysql> create table course (-> id int not null auto_increment,-> cname char(50) not null,-> primary key(id),-> index(cname)-> );
Query OK, 0 rows affected (0.01 sec)mysql> show tables;
+------------------+
| Tables_in_mydata |
+------------------+
| course           |
| student          |
+------------------+
2 rows in set (0.03 sec)mysql> desc course;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int(11)  | NO   | PRI | NULL    | auto_increment |
| cname | char(50) | NO   | MUL | NULL    |                |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.06 sec)mysql> 
mysql> desc student;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| Sno       | char(11) | NO   |     | NULL    |       |
| Sage      | int(11)  | YES  | MUL | NULL    |       |
| Sbirthday | datetime | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
3 rows in set (0.03 sec)mysql> alter table student add index index_sbirth(Sbirthday);
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> desc student;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| Sno       | char(11) | NO   |     | NULL    |       |
| Sage      | int(11)  | YES  | MUL | NULL    |       |
| Sbirthday | datetime | YES  | MUL | NULL    |       |
+-----------+----------+------+-----+---------+-------+
3 rows in set (0.05 sec)mysql> 

2、索引的查看

SHOW {INDEX|INDEXS|KEYS} {FROM|IN} tbl_name [{FROM|IN} db_name]
mysql> show index in student;
+---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name     | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| student |          1 | index_sage   |            1 | Sage        | A         | NULL        | NULL     | NULL   | YES  | BTREE      |         |               |
| student |          1 | index_sbirth |            1 | Sbirthday   | A         | NULL        | NULL     | NULL   | YES  | BTREE      |         |               |
+---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.04 sec)mysql> 

在这里插入图片描述

3、索引的删除

DROP INDEX index_name ON tbl_nameALTER TABLE tbl_name DROP INDEX index_name
mysql> drop index index_sage on student;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> show index in student;
+---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table   | Non_unique | Key_name     | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| student |          1 | index_sbirth |            1 | Sbirthday   | A         | NULL        | NULL     | NULL   | YES  | BTREE      |         |               |
+---------+------------+--------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
1 row in set (0.03 sec)mysql> alter table student drop index index_sbirth;
Query OK, 0 rows affected (0.01 sec)
Records: 0  Duplicates: 0  Warnings: 0mysql> show index in student;
Empty setmysql> 

在这里插入图片描述

第四节 数据更新

一、插入数据

-- 重点
INSERT语法格式
INSERT INTO tb_name(column_list)
VALUES(value_list1)[,(value_list2)],
从数据查询中插入数据
INSERT INTO tb_namel(column_listl)
SELECT (column_list2)
FROM tb_name2 WHERE(condition)
注意:column_list1与clolumn_list2必须个数相同且数据类型一一对应
使用INSERT...SET语句插入部分列值数据
INSERT [INTO] tbl-name
SET col_name={expr | DEFAULT},***使用INSERT...SELECT语句插入子查询数据
INSERT[INTO]tbl_name[(col name,**-)]
SELECT ...
mysql> desc student;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| Sno       | char(11) | NO   |     | NULL    |       |
| Sage      | int(11)  | YES  |     | NULL    |       |
| Sbirthday | datetime | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
3 rows in set (0.04 sec)mysql> insert into student (Sno,Sage,Sbirthday) values (-> '001',18,'2002-09-08 07:06:05'-> );
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+-----+------+---------------------+
| Sno | Sage | Sbirthday           |
+-----+------+---------------------+
| 001 |   18 | 2002-09-08 07:06:05 |
+-----+------+---------------------+
1 row in set (0.05 sec)mysql> 
mysql> insert student set-> Sno='002',-> Sage=19,-> Sbirthday='2002-12-12 11:11:11'-> ;
Query OK, 1 row affected (0.01 sec)mysql> select * from student;
+-----+------+---------------------+
| Sno | Sage | Sbirthday           |
+-----+------+---------------------+
| 001 |   18 | 2002-09-08 07:06:05 |
| 002 |   19 | 2002-12-12 11:11:11 |
+-----+------+---------------------+
2 rows in set (0.04 sec)mysql> 

二、删除数据

DELETE FROM tb_name [WHERE <CONDITION>];

​ 删除所以记录可以使用

TRUNCATE [TABLE] tb_name

注意:TRUNCATE是删除整个表,重新建一个表,在删除全部数据时候效率高于DELETE,DELETE是逐条删除。TRUNCATE无法恢复,AUTO_INCREMENT计数器重置。

mysql> insert into student (Sno,Sage,Sbirthday) values ('003',18,'2003-11-09 21:38:21');
Query OK, 1 row affected (0.00 sec)mysql> insert into student (Sno,Sage,Sbirthday) values ('004',17,'2002-11-09 04:31:11');
Query OK, 1 row affected (0.00 sec)mysql> select * from student;
+-----+------+---------------------+
| Sno | Sage | Sbirthday           |
+-----+------+---------------------+
| 001 |   18 | 2002-09-08 07:06:05 |
| 002 |   19 | 2002-12-12 11:11:11 |
| 003 |   18 | 2003-11-09 21:38:21 |
| 004 |   17 | 2002-11-09 04:31:11 |
+-----+------+---------------------+
4 rows in set (0.05 sec)mysql> delete from student where sage=18;
Query OK, 2 rows affected (0.00 sec)mysql> select * from student;
+-----+------+---------------------+
| Sno | Sage | Sbirthday           |
+-----+------+---------------------+
| 002 |   19 | 2002-12-12 11:11:11 |
| 004 |   17 | 2002-11-09 04:31:11 |
+-----+------+---------------------+
2 rows in set (0.03 sec)-- ==============================================================mysql> show tables;
+------------------+
| Tables_in_mydata |
+------------------+
| course           |
| student          |
+------------------+
2 rows in set (0.02 sec)mysql> desc course;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| id    | int(11)  | NO   | PRI | NULL    | auto_increment |
| cname | char(50) | NO   | MUL | NULL    |                |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.05 sec)mysql> insert into course (cname) values-> ('语文'),-> ('数学'),-> ('英语'),-> ('政治');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0mysql> select * from course;
+----+-------+
| id | cname |
+----+-------+
|  1 | 语文  |
|  2 | 数学  |
|  3 | 英语  |
|  4 | 政治  |
+----+-------+
4 rows in set (0.04 sec)mysql> delete from course;
Query OK, 4 rows affected (0.00 sec)mysql> select * from course;
Empty set-- 然后新增两条记录,发现id是从5、6开始的
mysql> insert into course (cname) values-> ('语文'),-> ('数学');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from course;
+----+-------+
| id | cname |
+----+-------+
|  5 | 语文  |
|  6 | 数学  |
+----+-------+
2 rows in set (0.04 sec)-- 用truncate计数器重置mysql> truncate course;
Query OK, 0 rows affected (0.00 sec)mysql> select * from course;
Empty setmysql> insert into course (cname) values-> ('语文'),-> ('数学');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from course;
+----+-------+
| id | cname |
+----+-------+
|  1 | 语文  |
|  2 | 数学  |
+----+-------+
2 rows in set (0.04 sec)mysql> 

三、修改数据

UPDATE tbl_name SET col_name1=expr1 [, col_name2=expr2 ...][WHERE where_definition]
mysql> select * from student;
+-----+------+---------------------+
| Sno | Sage | Sbirthday           |
+-----+------+---------------------+
| 002 |   19 | 2002-12-12 11:11:11 |
| 004 |   17 | 2002-11-09 04:31:11 |
+-----+------+---------------------+
2 rows in set (0.02 sec)mysql> update student set sage=20 where Sno='004';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from student;
+-----+------+---------------------+
| Sno | Sage | Sbirthday           |
+-----+------+---------------------+
| 002 |   19 | 2002-12-12 11:11:11 |
| 004 |   20 | 2002-11-09 04:31:11 |
+-----+------+---------------------+
2 rows in set (0.04 sec)mysql> 

第五节 数据查询

一、SELECT语句

SELECT [ALL | DISTINCT | DISTINCTROW] select_expr, ... [FROM table_reference [,table_reference]...][WHERE  where_definition]     /*WHERE子句*/[GROUP BY[col_name | expr | position)[ASC | DESC], ...[WITH ROLLUP]]     /*GROUP BY子句*/
[HAVING where_definition]     /*HAVING子句*/
[ORDER BY{col_name | expr | position}[ASC | DESC], ...]     /*ORDER BY子句*/
[LIMIT{[offset,]row_count | row_count OFFSET offset}]     /*LIMIT子句*/
表4.2 SELECT语句中各子句的使用次序及说明
子句说明是否必须使用
SELECT返回的列或表达式
FROM从中检索数据的表仅在从表选择数据时使用
WHERE行级过滤
GROUP BY分组说明仅在从表选择数据时使用
HAVING组级说明
ORDER BY输出排序顺序
LIMIT要检索的行数

二、列的选择与指定

1、选择指定的列

SELECT classNo, department, className From tb_class;-- 选择所有列
SELECT * FORM tb_class;
mysql> desc student;
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| Sno       | char(11) | NO   |     | NULL    |       |
| Sage      | int(11)  | YES  |     | NULL    |       |
| Sbirthday | datetime | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
3 rows in set (0.05 sec)mysql> select Sbirthday from student;
+---------------------+
| Sbirthday           |
+---------------------+
| 2002-12-12 11:11:11 |
| 2002-11-09 04:31:11 |
+---------------------+
2 rows in set (0.04 sec)mysql> select * from student;
+-----+------+---------------------+
| Sno | Sage | Sbirthday           |
+-----+------+---------------------+
| 002 |   19 | 2002-12-12 11:11:11 |
| 004 |   20 | 2002-11-09 04:31:11 |
+-----+------+---------------------+
2 rows in set (0.06 sec)mysql> 

2、定义并使用列的别名

SELECT studentName as 姓名, sex as 性别, YEAR (NOW())-YEAR(birthday) as 年龄 from tb_student;
mysql> select-> sno as 学号,-> sage as 年龄,-> sbirthday as 出生日期-> from student;
+------+------+---------------------+
| 学号 | 年龄 | 出生日期            |
+------+------+---------------------+
| 002  |   19 | 2002-12-12 11:11:11 |
| 004  |   20 | 2002-11-09 04:31:11 |
+------+------+---------------------+
2 rows in set (0.05 sec)mysql> 

3、替换查询结果集中的数据

CASE
WHEN 条件1 THEN 表达式1WHEN 条件2 THEN 表达式2...
ELSE 表达式
END[AS] column_alias

4、计算列值

​ 使用SELECT语句对列进行查询时,在结果集中可以输出对列值计算后的值,其具体使用方法是将SELECT语句的语法项“select_expr”指定为对应列参与计算的表达式。

mysql> select * from rec;
+----+-----+-----+-------+-----+
| id | Gno | Pno | price | num |
+----+-----+-----+-------+-----+
|  1 | 001 | 001 |   1.2 | 300 |
|  2 | 001 | 002 |   1.5 | 200 |
|  3 | 002 | 001 |   1.2 | 170 |
|  4 | 002 | 002 |   1.5 | 130 |
|  5 | 003 | 001 |   1.2 | 110 |
|  6 | 003 | 002 |   1.5 |  60 |
+----+-----+-----+-------+-----+
6 rows in set (0.04 sec)mysql> select price*num as 销售额,gno,pno from rec;
+--------------------+-----+-----+
| 销售额             | gno | pno |
+--------------------+-----+-----+
| 360.00001430511475 | 001 | 001 |
|                300 | 001 | 002 |
|  204.0000081062317 | 002 | 001 |
|                195 | 002 | 002 |
| 132.00000524520874 | 003 | 001 |
|                 90 | 003 | 002 |
+--------------------+-----+-----+
6 rows in set (0.05 sec)mysql> 

5、聚合函数

表4.3 MySQL中常用聚合函数表
函数名说明
COUNT求组中项数,返回INT类型整数
MAX求最大值
MIN求最小值
SUM返回表达式中所有值的和
AVG求组中值的平均值
STD或STDDEV返回给定表达式中所有值得标准值
VARLANCE返回给定表达式中所有值得方差
GROUP_CONCAT返回由属于一组的列值连接组合而成的结果
BIT_AND逻辑或
BIR_OR逻辑与
BIT_XOR逻辑异或
-- 销售数量超过150的条数
mysql> select count(*) from rec where num>150;
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.03 sec)-- 取某一列的最大值
mysql> select max(num*price),gno from rec;
+--------------------+-----+
| max(num*price)     | gno |
+--------------------+-----+
| 360.00001430511475 | 001 |
+--------------------+-----+
1 row in set (0.02 sec)-- 在MySQL5.7版本之后对group by进行了优化。默认启动改进之后的版本启动了ONLY_FULL_GROUP_BY模式。即ONLY_FULL_GROUP_BY是MySQL数据库提供的一个sql_mode,通过这个sql_mode来保证SQL语句“分组求最值”合法性的检查。这种模式采用了与Oracle、DB2等数据库的处理方式。即不允许select target list中出现语义不明确的列。
-- 解决方式:只要有聚合函数sum(),count(),max(),avg()等函数就需要用到group by
-- mysql> select version();
-- +-----------+
-- | version() |
-- +-----------+
-- | 5.5.29    |
-- +-----------+
-- 1 row in set (0.06 sec)mysql> select min(num*price),gno from rec;
+----------------+-----+
| min(num*price) | gno |
+----------------+-----+
|             90 | 001 |
+----------------+-----+
1 row in set (0.02 sec)mysql> select sum(num*price) as 总销售额 from rec;
+--------------------+
| 总销售额           |
+--------------------+
| 1281.0000276565552 |
+--------------------+
1 row in set (0.04 sec)mysql> select avg(num*price) as 平均销售额 from rec;
+--------------------+
| 平均销售额         |
+--------------------+
| 213.50000460942587 |
+--------------------+
1 row in set (0.05 sec)mysql> 

三、FROM子句与多表连接查询

1、交叉连接

2、内连接

FROM table1 [INNER] JOIN table2 ON 连接条件等值连接
FROM table1, [table2] ......
WHERE table1.字段 <比较运算符> table2.字段
-- 准备数据↓↓↓↓↓
mysql> create table gong(-> id int NOT NULL primary key AUTO_INCREMENT,-> gnum char(11) NOT NULL,-> gname varbinary(255) NOT NULL-> );
Query OK, 0 rows affected (0.00 sec)mysql> insert into gong (gnum,gname) values-> ('001','张三'),-> ('002','李四'),-> ('003','王五');
Query OK, 3 rows affected (2.04 sec)
Records: 3  Duplicates: 0  Warnings: 0mysql> insert into pro (pnum,pname) values-> ('001','产品1'),-> ('002','产品2');
Query OK, 2 rows affected (2.04 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> select * from gong;
+----+------+-------+
| id | gnum | gname |
+----+------+-------+
|  2 | 001  | 张三  |
|  3 | 002  | 李四  |
|  4 | 003  | 王五  |
+----+------+-------+
3 rows in set (0.03 sec)mysql> select * from pro;
+----+------+-------+
| id | pnum | pname |
+----+------+-------+
|  1 | 001  | 产品1 |
|  2 | 002  | 产品2 |
+----+------+-------+
2 rows in set (0.04 sec)-- 准备数据完成↑↑↑↑↑mysql> select * from gong,rec;
+----+------+-------+----+-----+-----+-------+-----+
| id | gnum | gname | id | Gno | Pno | price | num |
+----+------+-------+----+-----+-----+-------+-----+
|  2 | 001  | 张三  |  1 | 001 | 001 |   1.2 | 300 |
|  3 | 002  | 李四  |  1 | 001 | 001 |   1.2 | 300 |
|  4 | 003  | 王五  |  1 | 001 | 001 |   1.2 | 300 |
|  2 | 001  | 张三  |  2 | 001 | 002 |   1.5 | 200 |
|  3 | 002  | 李四  |  2 | 001 | 002 |   1.5 | 200 |
|  4 | 003  | 王五  |  2 | 001 | 002 |   1.5 | 200 |
|  2 | 001  | 张三  |  3 | 002 | 001 |   1.2 | 170 |
|  3 | 002  | 李四  |  3 | 002 | 001 |   1.2 | 170 |
|  4 | 003  | 王五  |  3 | 002 | 001 |   1.2 | 170 |
|  2 | 001  | 张三  |  4 | 002 | 002 |   1.5 | 130 |
|  3 | 002  | 李四  |  4 | 002 | 002 |   1.5 | 130 |
|  4 | 003  | 王五  |  4 | 002 | 002 |   1.5 | 130 |
|  2 | 001  | 张三  |  5 | 003 | 001 |   1.2 | 110 |
|  3 | 002  | 李四  |  5 | 003 | 001 |   1.2 | 110 |
|  4 | 003  | 王五  |  5 | 003 | 001 |   1.2 | 110 |
|  2 | 001  | 张三  |  6 | 003 | 002 |   1.5 |  60 |
|  3 | 002  | 李四  |  6 | 003 | 002 |   1.5 |  60 |
|  4 | 003  | 王五  |  6 | 003 | 002 |   1.5 |  60 |
+----+------+-------+----+-----+-----+-------+-----+
18 rows in set (0.10 sec)mysql> select * from gong join rec on gong.gnum=rec.gno;
+----+------+-------+----+-----+-----+-------+-----+
| id | gnum | gname | id | Gno | Pno | price | num |
+----+------+-------+----+-----+-----+-------+-----+
|  2 | 001  | 张三  |  1 | 001 | 001 |   1.2 | 300 |
|  2 | 001  | 张三  |  2 | 001 | 002 |   1.5 | 200 |
|  3 | 002  | 李四  |  3 | 002 | 001 |   1.2 | 170 |
|  3 | 002  | 李四  |  4 | 002 | 002 |   1.5 | 130 |
|  4 | 003  | 王五  |  5 | 003 | 001 |   1.2 | 110 |
|  4 | 003  | 王五  |  6 | 003 | 002 |   1.5 |  60 |
+----+------+-------+----+-----+-----+-------+-----+
6 rows in set (0.05 sec)mysql> select * from gong,rec where gong.gnum=rec.gno;
+----+------+-------+----+-----+-----+-------+-----+
| id | gnum | gname | id | Gno | Pno | price | num |
+----+------+-------+----+-----+-----+-------+-----+
|  2 | 001  | 张三  |  1 | 001 | 001 |   1.2 | 300 |
|  2 | 001  | 张三  |  2 | 001 | 002 |   1.5 | 200 |
|  3 | 002  | 李四  |  3 | 002 | 001 |   1.2 | 170 |
|  3 | 002  | 李四  |  4 | 002 | 002 |   1.5 | 130 |
|  4 | 003  | 王五  |  5 | 003 | 001 |   1.2 | 110 |
|  4 | 003  | 王五  |  6 | 003 | 002 |   1.5 |  60 |
+----+------+-------+----+-----+-----+-------+-----+
6 rows in set (0.10 sec)mysql> 

3、外连接

(1)左连接
FROM table1 [LEFT] JOIN table2 ON 连接条件
(2)右连接
FROM table1 [RIGHT] JOIN table2 ON 连接条件
mysql> select * from gong left join rec on gong.gnum=rec.gno;
+----+------+-------+----+-----+-----+-------+-----+
| id | gnum | gname | id | Gno | Pno | price | num |
+----+------+-------+----+-----+-----+-------+-----+
|  2 | 001  | 张三  |  1 | 001 | 001 |   1.2 | 300 |
|  2 | 001  | 张三  |  2 | 001 | 002 |   1.5 | 200 |
|  3 | 002  | 李四  |  3 | 002 | 001 |   1.2 | 170 |
|  3 | 002  | 李四  |  4 | 002 | 002 |   1.5 | 130 |
|  4 | 003  | 王五  |  5 | 003 | 001 |   1.2 | 110 |
|  4 | 003  | 王五  |  6 | 003 | 002 |   1.5 |  60 |
+----+------+-------+----+-----+-----+-------+-----+
6 rows in set (0.04 sec)-- 我再加一条记录004mysql> insert into rec values (7,'003','001',1.2,600);
Query OK, 1 row affected (2.03 sec)mysql> select * from gong left join rec on gong.gnum=rec.gno;
+----+------+-------+----+-----+-----+-------+-----+
| id | gnum | gname | id | Gno | Pno | price | num |
+----+------+-------+----+-----+-----+-------+-----+
|  2 | 001  | 张三  |  1 | 001 | 001 |   1.2 | 300 |
|  2 | 001  | 张三  |  2 | 001 | 002 |   1.5 | 200 |
|  3 | 002  | 李四  |  3 | 002 | 001 |   1.2 | 170 |
|  3 | 002  | 李四  |  4 | 002 | 002 |   1.5 | 130 |
|  4 | 003  | 王五  |  5 | 003 | 001 |   1.2 | 110 |
|  4 | 003  | 王五  |  6 | 003 | 002 |   1.5 |  60 |
|  4 | 003  | 王五  |  7 | 003 | 001 |   1.2 | 600 |
+----+------+-------+----+-----+-----+-------+-----+
7 rows in set (0.08 sec)-- 这个时候发现004没有,也就是说左连接的时候,在右里面有和它对应的就到一起,否则直接剔除mysql> select * from gong right join rec on gong.gnum=rec.gno;
+----+------+-------+----+-----+-----+-------+-----+
| id | gnum | gname | id | Gno | Pno | price | num |
+----+------+-------+----+-----+-----+-------+-----+
|  2 | 001  | 张三  |  1 | 001 | 001 |   1.2 | 300 |
|  2 | 001  | 张三  |  2 | 001 | 002 |   1.5 | 200 |
|  3 | 002  | 李四  |  3 | 002 | 001 |   1.2 | 170 |
|  3 | 002  | 李四  |  4 | 002 | 002 |   1.5 | 130 |
|  4 | 003  | 王五  |  5 | 003 | 001 |   1.2 | 110 |
|  4 | 003  | 王五  |  6 | 003 | 002 |   1.5 |  60 |
|NULL| NULL | NULL |  7 | 004 | 001 |   1.2 | 600 |
+----+------+-------+----+-----+-----+-------+-----+
7 rows in set (0.09 sec)mysql> 

四、WHERE子句与条件查询

查询条件操作符
比较=,<>,!=,<,<=,>,>=,!<,!> NOT+比较运算表达式
确定范围DETWEEN AND, NOT BETWEEN AND
确定集合IN, NOT IN
字符匹配LIKE, NOT LIKE
空值IS NULL, IS NOT NULL
多重条件AND, OR
mysql> select * from rec where num>200;
+----+-----+-----+-------+-----+
| id | Gno | Pno | price | num |
+----+-----+-----+-------+-----+
|  1 | 001 | 001 |   1.2 | 300 |
|  7 | 003 | 001 |   1.2 | 600 |
+----+-----+-----+-------+-----+
2 rows in set (2.08 sec)mysql> select * from rec where num <= 200;
+----+-----+-----+-------+-----+
| id | Gno | Pno | price | num |
+----+-----+-----+-------+-----+
|  2 | 001 | 002 |   1.5 | 200 |
|  3 | 002 | 001 |   1.2 | 170 |
|  4 | 002 | 002 |   1.5 | 130 |
|  5 | 003 | 001 |   1.2 | 110 |
|  6 | 003 | 002 |   1.5 |  60 |
+----+-----+-----+-------+-----+
5 rows in set (0.05 sec)mysql> select * from rec where num between 150 and 300;
+----+-----+-----+-------+-----+
| id | Gno | Pno | price | num |
+----+-----+-----+-------+-----+
|  1 | 001 | 001 |   1.2 | 300 |
|  2 | 001 | 002 |   1.5 | 200 |
|  3 | 002 | 001 |   1.2 | 170 |
+----+-----+-----+-------+-----+
3 rows in set (0.05 sec)mysql> insert into pro (pnum,pname) values ('003','产品3'),('004','产品4');
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0-- 查卖出去的mysql> select * from pro;
+----+------+-------+
| id | pnum | pname |
+----+------+-------+
|  1 | 001  | 产品1 |
|  2 | 002  | 产品2 |
|  3 | 003  | 产品3 |
|  4 | 004  | 产品4 |
+----+------+-------+
4 rows in set (0.08 sec)mysql> select * from pro where pnum in (select distinct pno from rec);
+----+------+-------+
| id | pnum | pname |
+----+------+-------+
|  1 | 001  | 产品1 |
|  2 | 002  | 产品2 |
+----+------+-------+
2 rows in set (0.10 sec)mysql> select * from pro where pnum not in (select distinct pno from rec);
+----+------+-------+
| id | pnum | pname |
+----+------+-------+
|  3 | 003  | 产品3 |
|  4 | 004  | 产品4 |
+----+------+-------+
2 rows in set (0.04 sec)mysql> insert into gong (gnum,gname) values ('004','赵云'),('005','赵雅芝'),('006','赵曼亿');
Query OK, 3 rows affected (2.02 sec)
Records: 3  Duplicates: 0  Warnings: 0-- 我们在这个表中找姓“赵”的都有谁mysql> select * from gong where gname like '赵%';
+----+------+--------+
| id | gnum | gname  |
+----+------+--------+
|  5 | 004  | 赵云   |
|  6 | 005  | 赵雅芝 |
|  7 | 006  | 赵曼亿 |
+----+------+--------+
3 rows in set (0.04 sec)mysql> insert into gong (gnum) values ('007');
Query OK, 1 row affected (0.00 sec)mysql> select * from gong;
+----+------+--------+
| id | gnum | gname  |
+----+------+--------+
|  2 | 001  | 张三   |
|  3 | 002  | 李四   |
|  4 | 003  | 王五   |
|  5 | 004  | 赵云   |
|  6 | 005  | 赵雅芝 |
|  7 | 006  | 赵曼亿 |
| 10 | 007  | NULL   |
+----+------+--------+
7 rows in set (0.10 sec)mysql> select * from gong where gname is null;
+----+------+--------+
| id | gnum | gname  |
+----+------+--------+
| 10 | 007  | NULL   |
+----+------+--------+
1 rows in set (0.10 sec)mysql> update gong set gname='张飞' where gnum=007;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from gong;
+----+------+--------+
| id | gnum | gname  |
+----+------+--------+
|  2 | 001  | 张三   |
|  3 | 002  | 李四   |
|  4 | 003  | 王五   |
|  5 | 004  | 赵云   |
|  6 | 005  | 赵雅芝 |
|  7 | 006  | 赵曼亿 |
| 10 | 007  | 张飞   |
+----+------+--------+
7 rows in set (0.06 sec)-- 姓“张”的并且卖出货的有谁mysql> select * from gong where gname like '张%' and gnum in (select distinct gnum from rec);
+----+------+-------+
| id | gnum | gname |
+----+------+-------+
|  2 | 001  | 张三  |
+----+------+-------+
1 rows in set (0.04 sec)mysql> 

子查询

IN语法:

WHERE 列名 IN (值列表或者子SELECT[但必须只有一列])

比较运算符:

WHERE 列名 <比较运算符> (值或者子SELECT[但必须只有一值])

EXIST查询

WHERE EXIST (SELECT)

五、GROUP BY子句与分组数据

语法:

[GROUP BY 字段列表][HAVING<条件表达式>]

含义:按照某一列的值相同的分成一组,进行聚合计算

mysql> select (price*num) as 销售额,rec.*from rec;
+--------------------+----+-----+-----+-------+-----+
| 销售额             | id | Gno | Pno | price | num |
+--------------------+----+-----+-----+-------+-----+
| 360.00001430511475 |  1 | 001 | 001 |   1.2 | 300 |
|                300 |  2 | 001 | 002 |   1.5 | 200 |
|  204.0000081062317 |  3 | 002 | 001 |   1.2 | 170 |
|                195 |  4 | 002 | 002 |   1.5 | 130 |
| 132.00000524520874 |  5 | 003 | 001 |   1.2 | 110 |
|                 90 |  6 | 003 | 002 |   1.5 |  60 |
|  720.0000286102295 |  7 | 003 | 001 |   1.2 | 600 |
+--------------------+----+-----+-----+-------+-----+
7 rows in set (2.08 sec)mysql> select sum(price*num) as 销售额,rec.* from rec group by gno;
+-------------------+----+-----+-----+-------+-----+
| 销售额            | id | Gno | Pno | price | num |
+-------------------+----+-----+-----+-------+-----+
| 660.0000143051147 |  1 | 001 | 001 |   1.2 | 300 |
| 399.0000081062317 |  3 | 002 | 001 |   1.2 | 170 |
| 942.0000338554382 |  5 | 003 | 001 |   1.2 | 110 |
+-------------------+----+-----+-----+-------+-----+
3 rows in set (0.05 sec)mysql> 

六、HAVING子句

​ 在SELECT语句中,除了能使用GROUP BY子句分组数据之外,还可以使用HAVING子句来过滤分组,即在结果集中规定包含哪些分组和排除哪些分组。

-- 销售额超过400
mysql> select sum(price*num) as 销售额,rec.* from rec group by gno having 销售额>400;
+-------------------+----+-----+-----+-------+-----+
| 销售额            | id | Gno | Pno | price | num |
+-------------------+----+-----+-----+-------+-----+
| 660.0000143051147 |  1 | 001 | 001 |   1.2 | 300 |
| 942.0000338554382 |  5 | 003 | 001 |   1.2 | 110 |
+-------------------+----+-----+-----+-------+-----+
2 rows in set (0.05 sec)mysql> 

七、ORDER BY子句

语法:

[ORDER BY 字段1 [ASC|DESC][,字段2[ASC|DESC]]......
-- 排序
mysql> select sum(price*num) as 销售额,rec.* from rec group by gno having 销售额>400 order by gno desc;
+-------------------+----+-----+-----+-------+-----+
| 销售额            | id | Gno | Pno | price | num |
+-------------------+----+-----+-----+-------+-----+
| 942.0000338554382 |  5 | 003 | 001 |   1.2 | 110 |
| 660.0000143051147 |  1 | 001 | 001 |   1.2 | 300 |
+-------------------+----+-----+-----+-------+-----+
2 rows in set (0.04 sec)mysql> 

八、LIMIT子句

LIMIT [位置偏移量,] 行数
mysql> select sum(price*num) as 销售额,rec.* from rec group by gno;
+-------------------+----+-----+-----+-------+-----+
| 销售额            | id | Gno | Pno | price | num |
+-------------------+----+-----+-----+-------+-----+
| 660.0000143051147 |  1 | 001 | 001 |   1.2 | 300 |
| 399.0000081062317 |  3 | 002 | 001 |   1.2 | 170 |
| 942.0000338554382 |  5 | 003 | 001 |   1.2 | 110 |
+-------------------+----+-----+-----+-------+-----+
3 rows in set (0.04 sec)mysql> select sum(price*num) as 销售额,rec.* from rec group by gno limit 0,3;
+-------------------+----+-----+-----+-------+-----+
| 销售额            | id | Gno | Pno | price | num |
+-------------------+----+-----+-----+-------+-----+
| 660.0000143051147 |  1 | 001 | 001 |   1.2 | 300 |
| 399.0000081062317 |  3 | 002 | 001 |   1.2 | 170 |
| 942.0000338554382 |  5 | 003 | 001 |   1.2 | 110 |
+-------------------+----+-----+-----+-------+-----+
3 rows in set (0.06 sec)mysql> select sum(price*num) as 销售额,rec.* from rec group by gno limit 1,3;
+-------------------+----+-----+-----+-------+-----+
| 销售额            | id | Gno | Pno | price | num |
+-------------------+----+-----+-----+-------+-----+
| 399.0000081062317 |  3 | 002 | 001 |   1.2 | 170 |
| 942.0000338554382 |  5 | 003 | 001 |   1.2 | 110 |
+-------------------+----+-----+-----+-------+-----+
2 rows in set (0.08 sec)mysql> 

第六节 视图

​ 视图是从一个或多个表(或视图)导出的表。视图是数据库的用户使用数据库的观点。例如,对于一个学校,其学生的情况存于数据库的一个或多个表中,而作为学校的不同职能部门,所关心的学生数据的内容是不同的。视图是一张虚表。视图一经定义以后,就可以像表一样被查询、修改、删除和更新。

一、创建视图

CREATE [OR REPLACE] [ALGORITHM={UNDEFINED | MERGE | TEMPTABLE}]VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]
mysql> create OR REPLACE view v_gname as select gname from gong;
Query OK, 0 rows affected (2.02 sec)mysql> create OR REPLACE view v_rec_gong as select gname,rec.* from gong,rec where gong.gnum=rec.gno;
Query OK, 0 rows affected (0.00 sec)mysql> 

二、删除视图

DROP VIEW [IF EXISTS]view_name [,view_name]...
mysql> drop view IF EXISTS v_gname;
Query OK, 0 rows affected (2.04 sec)mysql> 

三、修改视图定义

语法格式:

ALTER VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]

四、查看视图定义

语法格式:

SHOW CREATE VIEW view_name
mysql> show create view v_rec_gong;
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| View       | Create View                                                                                                                                                                                                                                                                                              | character_set_client | collation_connection |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
| v_rec_gong | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_rec_gong` AS select `gong`.`gname` AS `gname`,`rec`.`id` AS `id`,`rec`.`Gno` AS `Gno`,`rec`.`Pno` AS `Pno`,`rec`.`price` AS `price`,`rec`.`num` AS `num` from (`gong` join `rec`) where (`gong`.`gnum` = `rec`.`Gno`) | utf8mb4              | utf8mb4_general_ci   |
+------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+
1 row in set (0.05 sec)mysql> 

在这里插入图片描述

五、更新视图数据

​ 要通过视图更新基本表数据,必须保证视图是可更新视图,即可以在INSERT,UPDATE或DELETE等语句当中使用它们。对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系。还有一些特定的其他结构,这类结构会使得视图不可更新。

强烈不建议更新视图,更新视图风险性非常大,更新不好的话影响到基本表,要用基本表取更新视图。

六、查询视图数据

​ 视图一经定义后,就可以如同查询数据库中的真实表一样,对视图进行数据查询检索,这也是对视图使用最多的一种操作。

mysql> create OR REPLACE view v_game as select gnum,gname from gong;
Query OK, 0 rows affected (0.00 sec)mysql> select * from v_game;
+------+--------+
| gnum | gname  |
+------+--------+
| 001  | 张三   |
| 002  | 李四   |
| 003  | 王五   |
| 004  | 赵云   |
| 005  | 赵雅芝 |
| 006  | 赵曼亿 |
| 007  | 张飞   |
+------+--------+
7 rows in set (0.11 sec)mysql> select * from v_game where gname like '赵%';
+------+--------+
| gnum | gname  |
+------+--------+
| 004  | 赵云   |
| 005  | 赵雅芝 |
| 006  | 赵曼亿 |
+------+--------+
3 rows in set (0.04 sec)mysql> 

附上mydata.sql

/*Navicat Premium Data TransferSource Server         : 00Source Server Type    : MySQLSource Server Version : 50529Source Host           : localhost:3306Source Schema         : mydataTarget Server Type    : MySQLTarget Server Version : 50529File Encoding         : 65001Date: 04/10/2023 18:27:33
*/create database IF NOT EXISTS mydata;
USE mydata;SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for course
-- ----------------------------
DROP TABLE IF EXISTS `course`;
CREATE TABLE `course`  (`id` int(11) NOT NULL AUTO_INCREMENT,`cname` char(50) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,PRIMARY KEY (`id`) USING BTREE,INDEX `cname`(`cname`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = FIXED;-- ----------------------------
-- Records of course
-- ----------------------------
INSERT INTO `course` VALUES (1, '语文');
INSERT INTO `course` VALUES (2, '数学');-- ----------------------------
-- Table structure for gong
-- ----------------------------
DROP TABLE IF EXISTS `gong`;
CREATE TABLE `gong`  (`id` int(11) NOT NULL AUTO_INCREMENT,`gnum` char(11) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,`gname` varbinary(255) NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 11 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of gong
-- ----------------------------
INSERT INTO `gong` VALUES (2, '001', 0xE5BCA0E4B889);
INSERT INTO `gong` VALUES (3, '002', 0xE69D8EE59B9B);
INSERT INTO `gong` VALUES (4, '003', 0xE78E8BE4BA94);
INSERT INTO `gong` VALUES (5, '004', 0xE8B5B5E4BA91);
INSERT INTO `gong` VALUES (6, '005', 0xE8B5B5E99B85E88A9D);
INSERT INTO `gong` VALUES (7, '006', 0xE8B5B5E69BBCE4BABF);
INSERT INTO `gong` VALUES (10, '007', 0xE5BCA0E9A39E);-- ----------------------------
-- Table structure for pro
-- ----------------------------
DROP TABLE IF EXISTS `pro`;
CREATE TABLE `pro`  (`id` int(11) NOT NULL AUTO_INCREMENT,`pnum` char(11) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,`pname` varbinary(255) NOT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of pro
-- ----------------------------
INSERT INTO `pro` VALUES (1, '001', 0xE4BAA7E5938131);
INSERT INTO `pro` VALUES (2, '002', 0xE4BAA7E5938132);
INSERT INTO `pro` VALUES (3, '003', 0xE4BAA7E5938133);
INSERT INTO `pro` VALUES (4, '004', 0xE4BAA7E5938134);-- ----------------------------
-- Table structure for rec
-- ----------------------------
DROP TABLE IF EXISTS `rec`;
CREATE TABLE `rec`  (`id` int(11) NOT NULL,`Gno` varchar(11) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,`Pno` varchar(11) CHARACTER SET utf8 COLLATE utf8_unicode_ci NULL DEFAULT NULL,`price` float NULL DEFAULT NULL,`num` int(11) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = DYNAMIC;-- ----------------------------
-- Records of rec
-- ----------------------------
INSERT INTO `rec` VALUES (1, '001', '001', 1.2, 300);
INSERT INTO `rec` VALUES (2, '001', '002', 1.5, 200);
INSERT INTO `rec` VALUES (3, '002', '001', 1.2, 170);
INSERT INTO `rec` VALUES (4, '002', '002', 1.5, 130);
INSERT INTO `rec` VALUES (5, '003', '001', 1.2, 110);
INSERT INTO `rec` VALUES (6, '003', '002', 1.5, 60);
INSERT INTO `rec` VALUES (7, '003', '001', 1.2, 600);-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (`Sno` char(11) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,`Sage` int(11) NULL DEFAULT NULL,`Sbirthday` datetime NULL DEFAULT NULL
) ENGINE = MyISAM CHARACTER SET = utf8 COLLATE = utf8_unicode_ci ROW_FORMAT = FIXED;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('002', 19, '2002-12-12 11:11:11');
INSERT INTO `student` VALUES ('004', 20, '2002-11-09 04:31:11');-- ----------------------------
-- View structure for v_game
-- ----------------------------
DROP VIEW IF EXISTS `v_game`;
CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `v_game` AS select gnum,gname from gong ;-- ----------------------------
-- View structure for v_rec_gong
-- ----------------------------
DROP VIEW IF EXISTS `v_rec_gong`;
CREATE ALGORITHM = UNDEFINED SQL SECURITY DEFINER VIEW `v_rec_gong` AS select gname,rec.* from gong,rec where gong.gnum=rec.gno ;SET FOREIGN_KEY_CHECKS = 1;

相关文章:

SQL与关系数据库基本操作

SQL与关系数据库基本操作 文章目录 第一节 SQL概述一、SQL的发展二、SQL的特点三、SQL的组成 第二节 MySQL预备知识一、MySQL使用基础二、MySQL中的SQL1、常量&#xff08;1&#xff09;字符串常量&#xff08;2&#xff09;数值常量&#xff08;3&#xff09;十六进制常量&…...

【2023年11月第四版教材】第18章《项目绩效域》(第一部分)

第18章《项目绩效域》&#xff08;第一部分&#xff09; 1 章节内容2 干系人绩效域2.1 绩效要点2.2 执行效果检查2.3 与其他绩效域的相互作用 3 团队绩效域3.1 绩效要点3.2 与其他绩效域的相互作用3.3 执行效果检查3.4 开发方法和生命周期绩效域 4 绩效要点4.1 与其他绩效域的相…...

Docker启动Mysql

如果docker里面没有mysql需要先pull一个mysql镜像 docker pull mysql其中123456是mysql的密码 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql可以使用如下命令进入Mysql的命令行界面 docker exec -it mysql bash登录mysql使用如下命令,root是…...

QScrollArea样式

简介 QScrollBar垂直滚动条分为sub-line、add-line、add-page、sub-page、up-arrow、down-arrow和handle几个部分。 QScrollBar水平滚动条分为sub-line、add-line、add-page、sub-page、left-arrow、right-arrow和handle几个部分。 部件如下图所示&#xff1a; 样式详…...

【gitlab】git push -u origin master 报403

问题描述 gitlab版本&#xff1a;14.0.5 虚拟机版本&#xff1a;centos7 项目&#xff1a;renren-fast 原因分析 .git -> config目录下 url配错 但这个url不是手动配置的&#xff0c;还不知道怎么生成。 解决方法 把配置错误的url改成gitlab的project的url 这样&#…...

第二篇:矩阵的翻转JavaScript

一维数组的翻转 // 一维矩阵翻转 // 实例&#xff1a; arr [1,2,3,4,5] > [5,4,3,2,1] let n readline() let arr readline().split( ).map(Number) // console.log(n,arr) let temp 0 for(let i 0; i < n/2;i){temp arr[i]arr[i] arr[n-i-1]arr[n-i-1] temp }…...

代码随想录算法训练营第五十七天 | 动态规划 part 15 | 392.判断子序列、115.不同的子序列

目录 392.判断子序列思路代码 115.不同的子序列思路代码 392.判断子序列 Leetcode 思路 dp[i][j] 表示以下标i-1为结尾的字符串s&#xff0c;和以下标j-1为结尾的字符串t&#xff0c;相同子序列的长度为dp[i][j]递推公式&#xff1a; 初始化&#xff1a;为0遍历顺序&#xff…...

【国漫逆袭】人气榜,小医仙首次上榜,霍雨浩排名飙升,不良人热度下降

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 为了提升作品和角色的讨论度&#xff0c;增加平台的用户活跃度&#xff0c;小企鹅推出了动漫角色榜&#xff0c;该榜单以【年】【周】【日】为单位&#xff0c;通过角色的点赞量和互动量进行排名 上周的动漫角…...

国庆中秋特辑(七)Java软件工程师常见20道编程面试题

以下是中高级Java软件工程师常见编程面试题&#xff0c;共有20道。 如何判断一个数组是否为有序数组&#xff1f; 答案&#xff1a;可以通过一次遍历&#xff0c;比较相邻元素的大小。如果发现相邻元素的大小顺序不对&#xff0c;则数组不是有序数组。 public boolean isSort…...

长剖与贪心+树上反悔贪心:1004T4

长剖的本质是一种贪心。&#xff08;启发式合并本质也是类似哈夫曼树的过程&#xff09; 在此题中&#xff0c;首先肯定变直径&#xff0c;然后选端点为根。然后选叶子。而每个叶子为了不重复计算&#xff0c;可以只计算其长剖后所在链的贡献。&#xff08;本题精髓&#xff0…...

二叉树经典例题

前言&#xff1a; 本文主要讲解了关于二叉树的简单经典的例题。 因为二叉树的特性&#xff0c;所以关于二叉树的大部分题目&#xff0c;需要利用分治的思想去递归解决问题。 分治思想&#xff1a; 把大问题化简成小问题&#xff08;根节点、左子树、右子树&#xff09;&…...

什么是指针的指针和指向函数的指针?

理解指针的指针和指向函数的指针对于C语言初学者来说可能会有些挑战&#xff0c;但它们都是非常重要的概念&#xff0c;可以帮助你更好地理解和利用C语言的强大功能。在本文中&#xff0c;我将详细解释这两个概念&#xff0c;包括它们的概念、用途和示例。 指针的指针&#xf…...

多个excel合并

目的&#xff1a;将同一个文件下的多个 “京东差评.xlsx” 合并为一个&#xff1a;“京东汇总.xlsx" 代码如下&#xff1a; # -*- coding: utf-8 -*- """ Created on Wed Oct 4 12:52:32 2023author: 64884 """import pandas as pd impor…...

Integrity Plus for Mac,保障网站链接无忧之选

在如今数字化的时代&#xff0c;网站链接的完整性对于用户体验和搜索引擎排名至关重要。如果您是一位网站管理员或者经常需要检查网站链接的人&#xff0c;那么Integrity Plus for Mac&#xff08;Integrity Plus&#xff09;将成为您最好的伙伴。 Integrity Plus是一款专业的…...

C#,数值计算——Sobol拟随机序列的计算方法与源程序

1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { /// <summary> /// Sobol quasi-random sequence /// </summary> public class Sobol { public Sobol() { } public static void sobseq(int n,…...

以太网协议介绍(ARP、UDP、ICMP、IP)

以太网协议介绍 一、ARP协议 请求&#xff1a; 应答&#xff1a; ARP协议&#xff1a; 0x0001 0x0800 6 4硬件类型&#xff1a;2个字节&#xff0c;arp协议不仅能在以太网上运行还能在其他类型的硬件上运行。以太网用1来表示&#xff1b; 协议类型&#xff1a;两字节。指的是a…...

【C++】STL详解(十)—— 用红黑树封装map和set

​ ​&#x1f4dd;个人主页&#xff1a;Sherry的成长之路 &#x1f3e0;学习社区&#xff1a;Sherry的成长之路&#xff08;个人社区&#xff09; &#x1f4d6;专栏链接&#xff1a;C学习 &#x1f3af;长路漫漫浩浩&#xff0c;万事皆有期待 上一篇博客&#xff1a;【C】STL…...

Android学习之路(17) Android Adapter详解

Adapter基础讲解 本节引言 从本节开始我们要讲的UI控件都是跟Adapter(适配器)打交道的&#xff0c;了解并学会使用这个Adapter很重要&#xff0c; Adapter是用来帮助填充数据的中间桥梁&#xff0c;简单点说就是&#xff1a;将各种数据以合适的形式显示到view上,提供 给用户看…...

实验室超声波萃取技术的原理和特点是什么?

梵英超声(fanyingsonic)实验室超声波清洗机 超声波萃取中药材的优越性源于超声波的特殊物理性质。通过压电换能器产生的快速机械振动波&#xff0c;超声波可减少目标萃取物与样品基体之间的作用力&#xff0c;从而实现固液萃取分离。 &#xff08;1&#xff09;加速介质质点运…...

用Python操作Word文档,看这一篇就对了!

本文主要讲解Python中操作word的思路。 一、Hello&#xff0c;world&#xff01; 使用win32com需要安装pypiwin32 pip install pypiwin32 推荐使用python的IDLE&#xff0c;交互方便 1、如何新建文档 from win32com.client import Dispatchapp Dispatch(Word.Application…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

【JavaWeb】Docker项目部署

引言 之前学习了Linux操作系统的常见命令&#xff0c;在Linux上安装软件&#xff0c;以及如何在Linux上部署一个单体项目&#xff0c;大多数同学都会有相同的感受&#xff0c;那就是麻烦。 核心体现在三点&#xff1a; 命令太多了&#xff0c;记不住 软件安装包名字复杂&…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...