准备测试数据
要学习SQL查询语句,首先必须解决一个问题,数据问题。
这里提供了一个test.sql文件。
登录MySQL,输入source xxx/test.sql
导入sql文件,sql文件实际上是一个脚本文件,里面有多行SQL语句,通过source命令可以批量执行。
执行完毕之后,使用show databases;
查看所有数据库,发现多了一个名为test的数据库。
使用show tables;
查看test数据库下所有的数据表,发现有四个表。
使用另一种方式导入数据库
-- 创建数据表
CREATE TABLE IF NOT EXISTS dept (
deptno SMALLINT PRIMARY KEY,
dname VARCHAR(14) ,
loc VARCHAR(13) ) ;
-- 插入测试数据 —— dept
INSERT INTO dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO dept VALUES (20,'RESEARCH','DALLAS');
INSERT INTO dept VALUES (30,'SALES','CHICAGO');
INSERT INTO dept VALUES (40,'OPERATIONS','BOSTON');
test 数据库表
以后讲解SQL语句的时候,主要使用的是test数据库下的四张表作为案例,所以首先就必须对这些表的作用以及列的数据类型做一个基本的了解。
部门表:dept
相关英语翻译:
-
accounting 会计 new york 纽约
-
research 研究员 dallas 达拉斯
-
sales 销售 chicago 芝加哥
-
operarions 运营 boston 波士顿
雇员表:emp
DECLMAL(7,2) 总共有 7 位,小数点后面有两位
SMALLINT,两字节,65535
相关英语翻译:
-
clerk 店员
-
salesman 售货员
-
manager 经理
-
analyst 化验员
-
president 董事长
工资等级表:salgrade
工资补贴表(工资条):bonus
工资补贴表没有数据
SQL语句规范
使用SQL语句请遵循以下规范:
-
SQL语句不区分大小写。但字符串常量区分大小写,建议命令大写,表名、库名小写;
-
SQL语句可单行或多行书写,每一个语句结束之后要以分号结尾;
-
用空格和缩进来提高语句的可读性。
-
注释:有三种风格的注释
-
单行注释可以用“#”
-
单行注释第二种写法用“-- ”,“--" 与注释之间是有空格的。
-
多行注释可以用/* */
-
数据库的基本操作
在MySQL之中有许多的数据库,可以使用以下命令查看所有数据库:
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema | #主要存储了系统中的一些数据库对象信息,比如用户表信息、列信息、权限信息、字符集信息和分区信息等。
| mysql | #MySQL的核心数据库,主要负责存储数据库用户、用户访问权限等 MySQL 自己需要使用的控制和管理信息。
| performance_schema | #主要用于收集数据库服务器性能参数。
| sys | #sys 数据库主要提供了一些视图,数据都来自于 performation_schema,主要是让开发者和使用者更方便地查看性能问题。
+--------------------+
这些数据库彼此之间是可以进行相互切换的,切换的基本语法如下:
USE <dbname>;
要想知道当前使用的是哪个数据库,那么可以使用select database();
命令来查看:
SELECT DATABASE();
+------------+
| DATABASE() |
+------------+
| test |
+------------+
1 row in set (0.00 sec)
在一个数据库下一定会存在多张数据表,那么这个时候也可以直接利用以下命令查看所有数据表:
SHOW TABLES;
+----------------+
| Tables_in_test |
+----------------+
| bonus |
| dept |
| emp |
| salgrade |
+----------------+
4 rows in set (0.02 sec)
查看具体某一张表的信息
SELECT * FROM emp;
+-------+--------+-----------+------+------------+------+------+--------+
| empno | ename | job | mgr | hiredate | sal | comm | deptno |
+-------+--------+-----------+------+------------+------+------+--------+
| 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800 | NULL | 20 |
| 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600 | 300 | 30 |
| 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250 | 500 | 30 |
| 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975 | NULL | 20 |
| 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250 | 1400 | 30 |
| 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850 | NULL | 30 |
| 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450 | NULL | 10 |
| 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000 | NULL | 20 |
| 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000 | NULL | 10 |
| 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500 | 0 | 30 |
| 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100 | NULL | 20 |
| 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950 | NULL | 30 |
| 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000 | NULL | 20 |
| 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300 | NULL | 10 |
+-------+--------+-----------+------+------------+------+------+--------+
14 rows in set (0.01 sec)
而如果想要知道某些数据表的表结构 / 字段类型,那么可以使用DESC命令:
DESC emp;
+----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| empno | smallint | NO | PRI | NULL | |
| ename | varchar(10) | YES | | NULL | |
| job | varchar(9) | YES | | NULL | |
| mgr | smallint | YES | | NULL | |
| hiredate | date | YES | | NULL | |
| sal | smallint | YES | | NULL | |
| comm | smallint | YES | | NULL | |
| deptno | smallint | YES | | NULL | |
+----------+-------------+------+-----+---------+-------+
8 rows in set (0.01 sec)
如果想要自己创建数据库,则需要使用以下命令:
CREATE DATABASE <dbname>;
如果数据库已经存在则会报错Can't create database '<dbname>'; database exists
,我们可以先判断数据库是否存在,不存在就创建,存在则忽略(只有警告没有报错)。
CREATE DATABASE IF NOT EXISTS <dbname>;
如果想要删除数据库,则可以使用以下命令:
DROP DATABASE <dbname>;
如果数据库不存在则会报错Can't drop database 'ss'; database doesn't exist
,在删除数据库时可以判断是否存在。
DROP DATABASE IF EXISTS <dbname>; #如果数据库存在则删除
使用 DROP DATABASE 命令时要非常谨慎,在执行该命令后,MySQL 不会给出任何提示确认信息。DROP DATABASE 删除数据库后,数据库中存储的所有数据表和数据也将一同被删除,而且不能恢复。