MySQL简单命令和SELECT查询,给字段起别名【MySQL数据库】

Java养成计划----学习打卡第六十四天

Java(打卡第六十四天)


MySQL数据库


博文不是每天都在发送,但是学习是每天都在进行的,因为不想为写而学,而是为学而写

昨天已经进行了MySQL的基本的安装,还有操作mySQL的命令比如SHOW ,CREATAE ,DESCRIBE,同时了解了分类,Data query language;数据 查询;SELECT data manipulation language INSERT , DELETE , UPDATE ; data definition language ; CREATE DROP ALTER SHOW ; transaction control language COMMIT ROLLBACK ; data control language GRANT , REVOKE

数据库的相关操作

数据库的导入

我们经常需要将sql文件给导入,那么这个时候就使用命令SOURCE + 路径,注意路径中不能有中文,这里我为了演示,先将数据库world使用命令

DROP DATABASE world;

删除之后,导入数据库

mysql> SOURCE D:MySQLSamples and Examples 8.0Sample DatabasesWorldworld-schema.sql

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

Query OK, 1 row affected (0.00 sec)

出现上述语句就是导入成功了,这里可以看一下

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| cfengbase          |
| company            |
| information_schema |
| mysql              |
| performance_schema |
| sakila             |
| sys                |
| world              |
+--------------------+
8 rows in set (0.01 sec)

导入成功

查看导入数据库中的表

就像查看数据库使用SHOW DATABASES; 当使用USE base_name之后就可以使用

SHOW TABLES;

查看数据库中有那些表

mysql> SHOW TABLES;
+-----------------+
| Tables_in_world |
+-----------------+
| city            |
| country         |
| countrylanguage |
+-----------------+
3 rows in set (0.01 sec)

这里有3张表,第一张表为city表,第二张表为country表,第三张表是countylanguage表

查看表中的数据

增删查改中的查,是对数据进行的操作,那就是DQL,data query language,使用

SELECT * FROM table_name;  //统一执行该语句

这里我们查看一下city表格的内容

mysql> SELECT * FROM city;
+------+-----------------------------------+-------------+------------------------+------------+
| ID   | Name                              | CountryCode | District               | Population |
+------+-----------------------------------+-------------+------------------------+------------+
|    1 | Kabul                             | AFG         | Kabol                  |    1780000 |
|    2 | Qandahar                          | AFG         | Qandahar               |     237500 |
|    3 | Herat                             | AFG         | Herat                  |     186800 |
|    4 | Mazar-e-Sharif                    | AFG         | Balkh                  |     127800 |
|    5 | Amsterdam                         | NLD         | Noord-Holland          |     731200 |
|    6 | Rotterdam                         | NLD         | Zuid-Holland           |     593321 |
|    7 | Haag                              | NLD         | Zuid-Holland           |     440900 |
|    8 | Utrecht                           | NLD         | Utrecht                |     234323 |
|    9 | Eindhoven                         | NLD         | Noord-Brabant          |     201843 |
|   10 | Tilburg                           | NLD         | Noord-Brabant          |     193238 |
|   11 | Groningen                         | NLD         | Groningen              |     172701 |
|   12 | Breda                             | NLD         | Noord-Brabant          |     160398 |
|   13 | Apeldoorn                         | NLD         | Gelderland             |     153491 |
|   14 | Nijmegen                          | NLD         | Gelderland             |     152463 |
|   15 | Enschede                          | NLD         | Overijssel             |     149544 |
|   16 | Haarlem                           | NLD         | Noord-Holland          |     148772 |
|   17 | Almere                            | NLD         | Flevoland              |     142465 |
|   18 | Arnhem                            | NLD         | Gelderland             |     138020 |
|   19 | Zaanstad                          | NLD         | Noord-Holland          |     135621 |
|   20 | ?s-Hertogenbosch                  | NLD         | Noord-Brabant          |     129170 |
|   21 | Amersfoort                        | NLD         | Utrecht                |     126270 |
    ………………………………………………………………………………………………………………………………………………………………
| 4064 | Odessa                            | USA         | Texas                  |      89293 |
| 4065 | Carson                            | USA         | California             |      89089 |
| 4066 | Charleston                        | USA         | South Carolina         |      89063 |
| 4067 | Charlotte Amalie                  | VIR         | St Thomas              |      13000 |
| 4068 | Harare                            | ZWE         | Harare                 |    1410000 |
| 4069 | Bulawayo                          | ZWE         | Bulawayo               |     621742 |
| 4070 | Chitungwiza                       | ZWE         | Harare                 |     274912 |
| 4071 | Mount Darwin                      | ZWE         | Harare                 |     164362 |
| 4072 | Mutare                            | ZWE         | Manicaland             |     131367 |
| 4073 | Gweru                             | ZWE         | Midlands               |     128037 |
| 4074 | Gaza                              | PSE         | Gaza                   |     353632 |
| 4075 | Khan Yunis                        | PSE         | Khan Yunis             |     123175 |
| 4076 | Hebron                            | PSE         | Hebron                 |     119401 |
| 4077 | Jabaliya                          | PSE         | North Gaza             |     113901 |
| 4078 | Nablus                            | PSE         | Nablus                 |     100231 |
| 4079 | Rafah                             | PSE         | Rafah                  |      92020 |
+------+-----------------------------------+-------------+------------------------+------------+
4079 rows in set (0.02 sec)

这张表记录的是世界主要的城市,第一列是城市的名称,第二个字段是城市所处的国家,第三个字段是城市所处的州【省】

mysql> DESCRIBE country;
+----------------+---------------------------------------------------------------------------------------+------+-----+---------+-------+
| Field          | Type                                                                                  | Null | Key | Default | Extra |
+----------------+---------------------------------------------------------------------------------------+------+-----+---------+-------+
| Code           | char(3)                                                                               | NO   | PRI |         |       |
| Name           | char(52)                                                                              | NO   |     |         |       |
| Continent      | enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') | NO   |     | Asia    |       |
| Region         | char(26)                                                                              | NO   |     |         |       |
| SurfaceArea    | float(10,2)                                                                           | NO   |     | 0.00    |       |
| IndepYear      | smallint                                                                              | YES  |     | NULL    |       |
| Population     | int                                                                                   | NO   |     | 0       |       |
| LifeExpectancy | float(3,1)                                                                            | YES  |     | NULL    |       |
| GNP            | float(10,2)                                                                           | YES  |     | NULL    |       |
| GNPOld         | float(10,2)                                                                           | YES  |     | NULL    |       |
| LocalName      | char(45)                                                                              | NO   |     |         |       |
| GovernmentForm | char(45)                                                                              | NO   |     |         |       |
| HeadOfState    | char(60)                                                                              | YES  |     | NULL    |       |
| Capital        | int                                                                                   | YES  |     | NULL    |       |
| Code2          | char(2)                                                                               | NO   |     |         |       |
+----------------+---------------------------------------------------------------------------------------+------+-----+---------+-------+
15 rows in set (0.01 sec)

mysql> DESCRIBE city;
+-------------+----------+------+-----+---------+----------------+
| Field       | Type     | Null | Key | Default | Extra          |
+-------------+----------+------+-----+---------+----------------+
| ID          | int      | NO   | PRI | NULL    | auto_increment |
| Name        | char(35) | NO   |     |         |                |
| CountryCode | char(3)  | NO   | MUL |         |                |
| District    | char(20) | NO   |     |         |                |
| Population  | int      | NO   |     | 0       |                |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> DESCRIBE countrylanguage;
+-------------+---------------+------+-----+---------+-------+
| Field       | Type          | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| CountryCode | char(3)       | NO   | PRI |         |       |
| Language    | char(30)      | NO   | PRI |         |       |
| IsOfficial  | enum('T','F') | NO   |     | F       |       |
| Percentage  | float(4,1)    | NO   |     | 0.0     |       |
+-------------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

另外两张表就不看了,太多数据了,cmd窗口差点爆掉,宏观上看一下,三者是由关系的

查看表的基本结构【简化】

上面已经使用过很多次了,就是

DESC table_name;
DESCRIBE table_name;

上面都是使用的全名,这里演示一下简化

mysql> DESC city;
+-------------+----------+------+-----+---------+----------------+
| Field       | Type     | Null | Key | Default | Extra          |
+-------------+----------+------+-----+---------+----------------+
| ID          | int      | NO   | PRI | NULL    | auto_increment |
| Name        | char(35) | NO   |     |         |                |
| CountryCode | char(3)  | NO   | MUL |         |                |
| District    | char(20) | NO   |     |         |                |
| Population  | int      | NO   |     | 0       |                |
+-------------+----------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

查看表的结构【详细】

查看表的详细结构

SHOW CREATE TABLE table_nameG;

注意和上面简化的区别

mysql> SHOW CREATE TABLE cityG;
*************************** 1. row ***************************
       Table: city
Create Table: CREATE TABLE `city` (
  `ID` int NOT NULL AUTO_INCREMENT,
  `Name` char(35) NOT NULL DEFAULT '',
  `CountryCode` char(3) NOT NULL DEFAULT '',
  `District` char(20) NOT NULL DEFAULT '',
  `Population` int NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`),
  KEY `CountryCode` (`CountryCode`),
  CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `country` (`Code`)
) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

可以看到其实这样子没有上面的直观,但是给出了原始的SQL语句

查看mysql数据库的版本号

之前使用java的命令时就知道 javac -version可以查看jdk的版本号,mysql也提供了查询命令,那就是select命令

SELECT VERSION();

注意这里带了一个小括号

mysql> SELECT VERSION();
+-----------+
| VERSION() |
+-----------+
| 8.0.27    |
+-----------+
1 row in set (0.00 sec)

非常直观的看到版本时8.0.27

查询当前使用的数据库

当操作数据库时,因为数据过多,或许就会忘记当前使用的数据库,这里还是使用的SELECT 查询

SHOW DATABASE();

演示一下,我上面操作很多次,已经找不到USE语句了,所以时需要查询的

mysql> SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| world      |
+------------+
1 row in set (0.00 sec)

使用的时world数据库,里面是有三张表的

  • 额外提醒一下,mysql语句是不见分号不终止的,分号代表语句的结束
  • 同时也可以使用==c==来终止一条语句

所以我们创建表的时候,就不使用分号,换行书写来达到结构的清晰

退出mysql

这里很简单,昨天已经提到过了,就是EXIT;

mysql> EXIT;
Bye

这里给大家来一次连续的操作

C:UsersOMEY-PC>mysql -h localhost -u cfeng -p
Enter password: ************
    
mysql> SHOW DATABASES;

mysql> USE cfengbase;

mysql> SHOW TABLES;

mysql> DESCRIBE fruits;

mysql> SHOW CREATE TABLE fruitsG;

mysql> SELECT * FROM fruits;
+------+-------------+--------------+---------------+---------------+
| id   | fruits_name | fruits_price | fruits_origin | fruits_remark |
+------+-------------+--------------+---------------+---------------+
| 1001 | 葡萄        |          3.7 | 山东          | 红香妃        |
| 1002 | 苹果        |          2.8 | 山东          | 红富士        |
| 1003 | 香蕉        |            6 | 海南          | 小芭蕉        |
+------+-------------+--------------+---------------+---------------+
3 rows in set (0.01 sec)

SQL查询语句DQL

其实上面已经使用到了查询语句了,比如查询一个表中的所有数据就是使用的DQL

查询一个表中的某个字段

SELECT col_name FROM table_name;

这和上面查询库中的所有数据是相似的,其实想一想就知道了,因为*代表的就是很多,就是所有的字段,和java中的关连属性的数目的表示相同

其中SELECT FROM 都是关键字,不区分大小写,而小写的col_name和table_name是标识符,大写容易识别,但是不要写错单词,演示一下查询字段,这里就以fruits表,查询fruits_name字段

mysql> SELECT fruits_name FROM fruits;
+-------------+
| fruits_name |
+-------------+
| 葡萄        |
| 苹果        |
| 香蕉        |
+-------------+
3 rows in set (0.00 sec)

这样查询,就可以检查查询的量了,一次性显示所有内容,可能屏幕都显示不完全

查询多个字段【使用逗号隔开就号】

既然查询一个字段我们已经知道了,并且查询所有字段,也就是整个表的内容也知道

查询多个字段就不难推出了

SELECT col_name1,col_name2……   FROM table_name;

这里我们可以先简单查看表的结构,再查询表的字段,这里就同时查询fruits的name和origin两个字段

mysql> DESC fruits;
+---------------+-------------+------+-----+---------+----------------+
| Field         | Type        | Null | Key | Default | Extra          |
+---------------+-------------+------+-----+---------+----------------+
| id            | int         | NO   | PRI | NULL    | auto_increment |
| fruits_name   | varchar(45) | NO   |     | NULL    |                |
| fruits_price  | double      | NO   |     | NULL    |                |
| fruits_origin | varchar(45) | NO   |     | NULL    |                |
| fruits_remark | varchar(45) | NO   |     | NULL    |                |
+---------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

mysql> SELECT fruits_name,fruits_origin FROM fruits;
+-------------+---------------+
| fruits_name | fruits_origin |
+-------------+---------------+
| 葡萄        | 山东          |
| 苹果        | 山东          |
| 香蕉        | 海南          |
+-------------+---------------+
3 rows in set (0.00 sec)

最容易犯的错误还是把单词拼写错误,还可以使用SHOW ERRORS, SHOW WARNINGS;查看具体的错误原因和所在的位置

这里可以稍微总结一下

  • 查询一个字段 SELECT col_name FROM table_name;
  • 查询多个字段 SELECT col_name1,col_name2,col_name3 …… FROM table_name;
  • 查询所有字段
    • 使用之前的方式,SELECT * FROM table_name; 方便但是效率要低一些,因为这是一个码,需要解码成所有的字段,这是需要时间的,所以实际开发中很少使用
    • 直接写出所有的字段 推荐使用,但是在自己的DOS窗口快速查询所有的内容可以使用*

给查询的字段起别名【AS】

在查询的时候,字段的名字是可以不是原本的名字,比如水果的发源地源表是fruits_origin,这个很长,不方便,起个别名发源地

查询的时候起别名的方式是AS,注意原来的字段名并没有修改

SELECT col_name1,col_name2 AS newname FROM table_name;

这里需要注意,查询时逗号后面都是字段名,所以as的前面时字段名,后面才是字段的别名

这里演示一下给水果发源地查询的时候起别名

mysql> SELECT fruits_name,发源地 AS fruits_origin FROM fruits;
ERROR 1054 (42S22): Unknown column '发源地' in 'field list'  //报错,顺序错误
mysql> SELECT fruits_name,fruits_origin AS 发源地 FROM fruits;
+-------------+--------+
| fruits_name | 发源地 |
+-------------+--------+
| 葡萄        | 山东   |
| 苹果        | 山东   |
| 香蕉        | 海南   |
+-------------+--------+
3 rows in set (0.00 sec)

SELECT操作是DQL语句,不是DML,所以不会改变原来的数据的

这里的AS是可以省略的,但是不能加逗号,上面提到逗号后面都是字段名,所以系统就会寻找是否有字段,就会报错

mysql> SELECT fruits_name 水果名称 FROM fruits;
+----------+
| 水果名称 |
+----------+
| 葡萄     |
| 苹果     |
| 香蕉     |
+----------+
3 rows in set (0.00 sec)

如果起的别名里面有空格怎么办

如果别名里面有空格,如果按照AS或者省略的方式都会报错的,系统认为字段后面是别名,别名后面没有逗号就会寻找FROM,可是找到的是别名的另外一半,就报错了

解决的办法是使用引号括起来,单引号,双引号都是可以的

SELECT col_name '水果  名称'  FROM table_name;

SELECT col_name "水果  名称"  FROM table_name;

这里还是演示一下使用

mysql> SELECT fruits_name "水果  名称" FROM fruits;
+------------+
| 水果  名称 |
+------------+
| 葡萄       |
| 苹果       |
| 香蕉       |
+------------+
3 rows in set (0.00 sec)

mysql> SELECT fruits_name '水果  名称' FROM fruits;
+------------+
| 水果  名称 |
+------------+
| 葡萄       |
| 苹果       |
| 香蕉       |
+------------+
3 rows in set (0.00 sec)

注意:所有的数据库中字符串是采用单引号括起来的,双引号有的数据库用不了

列参可直接数学运算

字段比如水果的价格,如果都涨价那么就直接做加法,只是加法后如果不起别名,那么字段名也就会运算

SELECT price+3 FROM fruits;

SELECT price+3 水果价格 FROM fruits;

注意这都是查询时所做的操作,原来的数据并没有改变

这里可以示范一下

mysql> SELECT fruits_name 水果名称,fruits_price FROM fruits;
+----------+--------------+
| 水果名称 | fruits_price |
+----------+--------------+
| 葡萄     |          3.7 |
| 苹果     |          2.8 |
| 香蕉     |            6 |
+----------+--------------+
3 rows in set (0.00 sec)

mysql>  SELECT fruits_name 水果名称,fruits_price+3 FROM fruits;
+----------+----------------+
| 水果名称 | fruits_price+3 |
+----------+----------------+
| 葡萄     |            6.7 |
| 苹果     |            5.8 |
| 香蕉     |              9 |
+----------+----------------+
3 rows in set (0.00 sec)

mysql> SELECT fruits_name 水果名称,fruits_price+3 水果新价格 FROM fruits;
+----------+------------+
| 水果名称 | 水果新价格 |
+----------+------------+
| 葡萄     |        6.7 |
| 苹果     |        5.8 |
| 香蕉     |          9 |
+----------+------------+
3 rows in set (0.00 sec)

这里起别名如果是中文最好使用单引号括起来,因为中文也是字符串,所以就使用单引号

查询时可以使用as ,数学运算来得到想要的查询结果,起别名碰到中文和空格加上单引号,查询时不会改变原数据库的内容,使用SELECT

今天就先了解简单查询,明天会详细介绍条件查询和模糊查询~?

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>