第三章: 简单Sql语句介绍

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三章: 简单Sql语句介绍相关的知识,希望对你有一定的参考价值。

SQL概述

结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统;同时也是数据库脚本文件的扩展名。

从上可以看出我们数据库相关工作职位大概两种:DBD和DBA

  1. DBD:数据库开发

  2. DBA:数据库管理

SQL 是1986年10 月由美国国家标准局(ANSI)通过的数据库语言美国标准,接着,国际标准化组织(ISO)颁布了SQL正式国际标准。1989年4月,ISO提出了具有完整性特征的SQL89标准,1992年11月又公布了SQL92标准,在此标准中,把数据库分为三个级别:基本集、标准集和完全集。

至于什么基本集,标准集我们不用管,看看就行,牵扯到数据库原理和数学算法里面了

SQL语句结构

结构化查询语言包含6个部分: 
一:数据查询语言(DQL:Data Query Language): (重要) 
其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDER BY,GROUP BY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。 
二:数据操作语言(DML:Data Manipulation Language): 
其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。 
三:事务处理语言(TPL): 
它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGIN TRANSACTION,COMMIT和ROLLBACK。 
四:数据控制语言(DCL): (重要) 
它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。 
五:数据定义语言(DDL): (重要) 
其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREAT TABLE 或 DROP TABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。 
六:指针控制语言(CCL): 
它的语句,像DECLARE CURSOR,FETCH INTO和UPDATE WHERE CURRENT用于对一个或多个表单独行的操作。

mysql语句

关于数据库的操作

查看数据库:show databases;

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+

| information_schema |
| mysql              |
| performance_
schema |
| test               |
+--------------------+

4 rows in set (0.00 sec)

MariaDB [(none)]>

MariaDB [(none)]> show databases \G   #以行的方式显示

注:

1:information_schema这数据库保存了MySQL服务器所有数据库的信息。如数据库名,数据库的表,表栏的数据类型不访问权限等。 
2:performance_schema 这是MySQL5.5新增的一个性能优化的引擎:命名PERFORMANCE_SCHEMA 
主要用于收集数据库服务器性能参数。MySQL用户是不能创建存储引擎为PERFORMANCE_SCHEMA的表 
http://www.cnblogs.com/hzhida/archive/2012/08/08/2628833.html 
3:元数据是关于数据信息的数据,如数据库名或表名,列的数据类型,或访问权限等。 
4:mysql库是系统库,里面保存有账户信息,权限信息等。

在命令行查看数据库

mysql –e 后面我们接SQL语句,直接终端运行,后面写sql 相关shell可以用到

[[email protected] mysql]# mysql -e ‘show databases‘ -uroot -p123456
+--------------------+
| Database           |
+--------------------+

| information_schema |
| mysql              |
| performance_
schema |
| test               |
+--------------------+

也可以使用mysql客户端自带命令查询

[[email protected] mysql]# mysqlshow -uroot -p123456
+--------------------+
|     Databases      |
+--------------------+

| information_schema |
| mysql              |
| performance_
schema |
| test               |
+--------------------+

创建数据库:

语法:create database 数据库名;

创建数据库注意事项:

1)在文件系统中,MySQL的数据存储区将以目录方式表示MySQL数据库。因此,上面命令中的数据库名字必须与操作系统的约束的目录名字一致。例如不允许文件和目录名中有\,/,:,*,?,”,<,>,|这些符号,在MySQL数据库名字中这些字母会被自动删除。<遵从目录的约束> 
2) 数据库的名字不能超过64个字符,包含特殊字符的名字或者是全部由数字或保留字组成的名字必须用单引号“包起来。

3) 数据库不能重名。

MariaDB [(none)]> create database HA;   #创建一个名为HA的数据库
Query OK, 1 row affected (0.01 sec)
MariaDB [(none)]> create database `HA-test`;
Query OK, 1 row affected (0.00 sec)

查看

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+

| information_schema |
| HA                 |
| HA-test            |
| mysql              |
| performance_
schema |
| test               |
+--------------------+

6 rows in set (0.00 sec)
[[email protected] mysql]# ls   #查看数据库存放目录
aria_log.00000001  HA           ibdata1      ib_logfile1  mysql.sock          test
aria_log_control   HA@002dtest  ib_logfile0  mysql        performance_schema

选择要操作的数据库:

使用USE语句将会选择一个数据库成为当前数据库。后面的操作默认都在被选择的数据库中操作。

MariaDB [(none)]> use HA;
Database changed
MariaDB [HA]> select database();    #查看自己所处的位置及默认所在的位置
+------------+
| database() |
+------------+

| HA         |
+------------+

1 row in set (0.00 sec)

MariaDB [HA]>
MariaDB [(none)]> select database();
+------------+
| database() |
+------------+

| NULL       |
+------------+

1 row in set (0.00 sec)

Null意味着没有选择数据库

Null在数据库中表示 不知道的数据,主要有3种意思:

1)知道数据存在,但不知道具体值. 
2)不知道数据是否存在. 
3)数据不存在.

[[email protected] mysql]# mysql -uroot -p123456 HA   在命令行选择默认的数据库
MariaDB [HA]> select database();
+------------+
| database() |
+------------+

| HA         |
+------------+

1 row in set (0.00 sec)

删除数据库:

MariaDB [HA]> drop database `HA-test`;
Query OK, 0 rows affected (0.00 sec)

删除没有任何提示,要慎重操作 
方法2:直接到数据库存放目录移出就行

cd /usr/local/mysql/data/
mv [email protected] /tmp
MariaDB [HA]> show databases;
+--------------------+
| Database           |
+--------------------+

| information_schema |
| HA                 |
| mysql              |
| performance_
schema |
| test               |
+--------------------+

5 rows in set (0.00 sec)

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

MariaDB [HA]> drop database if exists `HA-test`;
Query OK, 0 rows affected, 1 warning (0.00 sec)

同理我们创建数据库时也可以使用

MariaDB [HA]> create database if not exists HA;
Query OK, 1 row affected, 1 warning (0.00 sec)
MariaDB [HA]> show warnings;
+-------+------+---------------------------------------------+
| Level | Code | Message                                     |
+-------+------+---------------------------------------------+

| Note  | 1007 | Can‘t create database ‘HA‘; database exists |
+-------+------+---------------------------------------------+

1 row in set (0.00 sec)

关于表的操作:

创建表:

语法:create table 表名 (字段名 类型, 字段名 类型, 字段名 类型)

MariaDB [HA]> create table mageedu(id int(20),name char(40),age int);
Query OK, 0 rows affected (0.00 sec)

查看表相关信息:

查看表:

要进入到数据库再查看

MariaDB [HA]> show tables;
+--------------+
| Tables_in_HA |
+--------------+

| mageedu      |
+--------------+

1 row in set (0.00 sec)
查看表的结构:
MariaDB [HA]> desc mageedu;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(20)  | YES  |     | NULL    |       |
| name  | char(40) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
MariaDB [HA]> explain mysql.user;
MariaDB [HA]> show columns from mysql.user;
MariaDB [HA]> show fields from mysql.user;
MariaDB [HA]> show columns from mysql.user like ‘%user‘;
查看创建表执行了哪些命令:
MariaDB [HA]> show create table mageedu\G
*************************** 1. row ***************************
      Table: mageedu
Create Table: CREATE TABLE `mageedu` (
 `id` int(20) DEFAULT NULL,
 `name` char(40) DEFAULT NULL,
 `age` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
MariaDB [HA]> create table mageedu2(id int(20),name char(40),age int)ENGINE=MyISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.00 sec)

ENGINE=InnoDB DEFAULT CHARSET=latin1这两个是默认存储引擎和默认字符集

删除表:

MariaDB [HA]> drop table mageedu2;
Query OK, 0 rows affected (0.00 sec)

禁止预读表信息:

没有禁止前的提示

MariaDB [HA]> use performance_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

登录的时候加上-A参数

mysql -uroot –p123456 -A

修改表名称ALTER:

语法:alter table 表名 rename 新表名;

MariaDB [HA]> alter table mageedu rename mageedu2;  #mageedu表名修改为mageedu2
Query OK, 0 rows affected (0.00 sec)

MariaDB [HA]> show tables;
+--------------+
| Tables_in_HA |
+--------------+

| mageedu2     |
+--------------+

1 row in set (0.00 sec)

修改表中的字段类型:

语法:alter table 表名 modify 要修改的字段名 要修改的类型;

MariaDB [HA]> desc mageedu2;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(20)  | YES  |     | NULL    |       |
| name  | char(40) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

MariaDB [HA]> alter table mageedu2 modify id int(10);
Query OK, 0 rows affected (0.00 sec)
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [HA]> desc mageedu2;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(10)  | YES  |     | NULL    |       |
| name  | char(40) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

修改表中的字段类型和字段名称:

语法:alter table 表名 change 原字段名 新字段名 新字段类型;

MariaDB [HA]> desc mageedu2;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| id    | int(10)  | YES  |     | NULL    |       |
| name  | char(40) | YES  |     | NULL    |       |
| age   | int(11)  | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

MariaDB [HA]> alter table mageedu2 change name stname char(20);
Query OK, 0 rows affected (0.00 sec)              
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [HA]> desc mageedu2;
+--------+----------+------+-----+---------+-------+
| Field  | Type     | Null | Key | Default | Extra |
+--------+----------+------+-----+---------+-------+
| id     | int(10)  | YES  |     | NULL    |       |
| stname | char(20) | YES  |     | NULL    |       |
| age    | int(11)  | YES  |     | NULL    |       |
+--------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)

注:CHANGE 和MODIFY的区别:

CHANGE 对列进行重命名和更改列的类型,需给定旧的列名称和新的列名称、当前的类型。 
MODIFY可以改变列的类型,此时不需要重命名(不需给定新的列名称)

在表中添加字段:

语法:alter table 表名 add 字段名 字段类型;

MariaDB [HA]> alter table mageedu2 add sex enum(‘M‘,‘W‘);
Query OK, 0 rows affected (0.00 sec)              
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [HA]> desc mageedu2;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| id     | int(10)       | YES  |     | NULL    |       |
| stname | char(20)      | YES  |     | NULL    |       |
| age    | int(11)       | YES  |     | NULL    |       |
| sex    | enum(‘M‘,‘W‘) | YES  |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

指定位置添加字段:

在第一列添加一个字段:

MariaDB [HA]> alter table mageedu2 add uid int(10) first;
Query OK, 0 rows affected (0.00 sec)              
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [HA]> desc mageedu2;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| uid    | int(10)       | YES  |     | NULL    |       |
| id     | int(10)       | YES  |     | NULL    |       |
| stname | char(20)      | YES  |     | NULL    |       |
| age    | int(11)       | YES  |     | NULL    |       |
| sex    | enum(‘M‘,‘W‘) | YES  |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

在age后面添加一个address字段:

MariaDB [HA]> alter table mageedu2 add addrss char(40) after age;
Query OK, 0 rows affected (0.00 sec)              
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [HA]> desc mageedu2;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| uid    | int(10)       | YES  |     | NULL    |       |
| id     | int(10)       | YES  |     | NULL    |       |
| stname | char(20)      | YES  |     | NULL    |       |
| age    | int(11)       | YES  |     | NULL    |       |
| addrss | char(40)      | YES  |     | NULL    |       |
| sex    | enum(‘M‘,‘W‘) | YES  |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
6 rows in set (0.00 sec)

删除表中字段:

语法:alter table 表名 drop 字段名 ;

MariaDB [HA]> alter table mageedu2 drop addrss;
Query OK, 0 rows affected (0.01 sec)              
Records: 0  Duplicates: 0  Warnings: 0

MariaDB [HA]> desc mageedu2;
+--------+---------------+------+-----+---------+-------+
| Field  | Type          | Null | Key | Default | Extra |
+--------+---------------+------+-----+---------+-------+
| uid    | int(10)       | YES  |     | NULL    |       |
| id     | int(10)       | YES  |     | NULL    |       |
| stname | char(20)      | YES  |     | NULL    |       |
| age    | int(11)       | YES  |     | NULL    |       |
| sex    | enum(‘M‘,‘W‘) | YES  |     | NULL    |       |
+--------+---------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

关于记录的操作:

插入字段<记录>INSERT:

语法:insert into 表名values (字段值1,字段值2, 字段值3);

##插入记录时要对应相对的类型
MariaDB [HA]> insert into mageedu2 values(001,‘zhanghe‘,20,‘M‘);
Query OK, 1 row affected (0.00 sec)
##同时插入多条,使用,分开
MariaDB [HA]> insert into mageedu2 values(002,‘mage‘,28,‘M‘),(003,‘longge‘,28,‘W‘);
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0
##指定字段插入
MariaDB [HA]> insert into mageedu2 (id,stname)values(004,‘aobama‘);
Query OK, 1 row affected (0.00 sec)

查询表中记录:

语法:select * from 表名称;

MariaDB [HA]> select * from mageedu2;   *表示所有
+------+---------+------+------+
| id   | stname  | age  | sex  |
+------+---------+------+------+
|    1 | zhanghe |   20 | M    |
|    2 | mage    |   28 | M    |
|    3 | longge  |   28 | W    |
|    4 | aobama  | NULL | NULL |
+------+---------+------+------+
4 rows in set (0.00 sec)

当字段比较多的时候我们也可以使用\G

MariaDB [HA]> select * from mageedu2\G
*************************** 1. row ***************************
   id: 1
stname: zhanghe
  age: 20
  sex: M
*************************** 2. row ***************************
   id: 2
stname: mage
  age: 28
  sex: M
*************************** 3. row ***************************
   id: 3
stname: longge
  age: 28
  sex: W
*************************** 4. row ***************************
   id: 4
stname: aobama
  age: NULL
  sex: NULL
4 rows in set (0.00 sec)

只查询表中某个字段的内容:

MariaDB [HA]> select stname from mageedu2;
+---------+
| stname  |
+---------+

| zhanghe |
| mage    |
| longge  |
| aobama  |
+---------+

4 rows in set (0.00 sec)
MariaDB [HA]> select id,stname from mageedu2;
+------+---------+
| id   | stname  |
+------+---------+

|    1 | zhanghe |
|    2 | mage    |
|    3 | longge  |
|    4 | aobama  |
+------+---------+

4 rows in set (0.00 sec)

查看别的数据库的表或者不在本数据库上进行查看: 
语法:SELECT 字段 FROM 数据库名.表名;

MariaDB [(none)]> select id,stname from HA.mageedu2;
+------+---------+
| id   | stname  |
+------+---------+

|    1 | zhanghe |
|    2 | mage    |
|    3 | longge  |
|    4 | aobama  |
+------+---------+

4 rows in set (0.00 sec)

删除记录:

删除id为3的行

MariaDB [(none)]> delete from HA.mageedu2 where id=3;
Query OK, 1 row affected (0.01 sec)

删除age为空的行

MariaDB [HA]> delete from mageedu2 where age is null;
Query OK, 1 row affected (0.00 sec)
MariaDB [HA]> select * from mageedu2;
+------+---------+------+------+
| id   | stname  | age  | sex  |
+------+---------+------+------+

|    1 | zhanghe |   20 | M    |
|    2 | mage    |   28 | M    |
+------+---------+------+------+

2 rows in set (0.00 sec)

更新记录

MariaDB [HA]> update mageedu2 set sex=‘W‘ where id=1;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

MariaDB [HA]> select * from mageedu2;
+------+---------+------+------+
| id   | stname  | age  | sex  |
+------+---------+------+------+

|    1 | zhanghe |   20 | W    |
|    2 | mage    |   28 | M    |
+------+---------+------+------+

2 rows in set (0.00 sec)

所有的都变为2

MariaDB [HA]> update mageedu2 set id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 2  Changed: 1  Warnings: 0

MariaDB [HA]> select * from mageedu2;
+------+---------+------+------+
| id   | stname  | age  | sex  |
+------+---------+------+------+

|    2 | zhanghe |   20 | W    |
|    2 | mage    |   28 | M    |
+------+---------+------+------+

2 rows in set (0.00 sec)

SQL基础条件查询语句

语法:select 字段名1,字段名2 from 表名 [where 条件];

1;查询magedu2表中的NAME,AGE
MariaDB [HA]> select stname,age from mageedu2;
+---------+------+
| stname  | age  |
+---------+------+

| zhanghe |   20 |
| mage    |   28 |
+---------+------+

2 rows in set (0.00 sec)
2:去重复查询DISTINCT
MariaDB [HA]> select distinct name,age from students;
+--------+------+
| name   | age  |
+--------+------+
| zhangs |   21 |
| lis    |   24 |
| jk     |   24 |
| lo     |   26 |
| io     |   25 |
MariaDB [HA]> select  distinct id,name,age from students where id=3;
+------+------+------+
| id   | name | age  |
+------+------+------+
|    3 | jk   |   24 |
3:使用AND和OR进行多条件查询

or和and 同时存在时,先算and的两边值,逻辑与先执行

MariaDB [HA]> select id,name,age from students where id>3 and age>25;
+------+------+------+
| id   | name | age  |
+------+------+------+

|    5 | lo   |   26 |
+------+------+------+


MariaDB [HA]> select id,name,age from students where id>3 or age>25;
+------+------+------+
| id   | name | age  |
+------+------+------+

|    5 | lo   |   26 |
|    6 | io   |   25 |
+------+------+------+

4:MYSQL区分大小写查询:

Mysql查询默认是不区分大小写的

MariaDB [HA]> select name from students where name=‘jk‘;
+------+
| name |
+------+

| jk   |
| jk   |
| JK   |
+------+

解决
MariaDB [HA]> select * from students where binary name=‘jk‘;
+------+------+------+------+
| id   | name | age  | sex  |
+------+------+------+------+

|    3 | jk   |   24 | W    |
|    3 | jk   |   24 | W    |
+------+------+------+------+

BINARY是类型转换运算符,它用来强制它后面的字符串为一个二进制字符串,可以理解为在字符串比较的时候区分大小写。

5:MYSQL查询排序: 
语法:select distinct 字段1,字段2 from 表名order by 字段名; 
默认为升序

MariaDB [HA]> select distinct id from students order by id;
+------+
| id   |
+------+

|    2 |
|    3 |
|    5 |
|    6 |
|    8 |
+------+


MariaDB [HA]> select distinct id from students order by id desc;
+------+
| id   |
+------+

|    8 |
|    6 |
|    5 |
|    3 |
|    2 |
+------+


本文出自 “家住海边喜欢浪” 博客,请务必保留此出处http://zhang789.blog.51cto.com/11045979/1874763

以上是关于第三章: 简单Sql语句介绍的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft SQL Server 代码片段收集

SQL编程第三章 复杂一点的查询

廖大python实战项目第三天

Android SQLite轻量级数据库(简单介绍)

Android SQLite轻量级数据库(简单介绍)

MYBATIS05_ifwherechoosewhentrimsetforEach标签sql片段