博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL系列文章 - 02 基本语法
阅读量:6135 次
发布时间:2019-06-21

本文共 4519 字,大约阅读时间需要 15 分钟。

原文链接

基本语句

1. 简单示例

开胃菜

SQL 中语句不区分大小写,例如

mysql> SELECT VERSION(), SIN(PI()/10), (10+3)*5, NOW(), CURRENT_DATE;+-----------+--------------------+----------+---------------------+--------------+| VERSION() | SIN(PI()/10)       | (10+3)*5 | NOW()               | CURRENT_DATE |+-----------+--------------------+----------+---------------------+--------------+| 5.7.20    | 0.3090169943749474 |       65 | 2017-12-08 14:26:03 | 2017-12-08   |+-----------+--------------------+----------+---------------------+--------------+1 row in set (0.00 sec)复制代码

如果 column 特别多,一行显示不完,折行后看起来杂乱,可以按字段展示,例如

mysql> SELECT VERSION(), SIN(PI()/10), (10+3)*5, NOW(), CURRENT_DATE\G;*************************** 1. row ***************************   VERSION(): 5.7.20SIN(PI()/10): 0.3090169943749474    (10+3)*5: 65       NOW(): 2017-12-08 14:30:52CURRENT_DATE: 2017-12-081 row in set (0.00 sec)复制代码

会按照上面的格式,详细的展示每个字段的名称及其值。

取消输入

如果输入了一部分语句需要取消,输入 \c即可

mysql> SELECT VERSION(), SIN(PI()/10), (10+3)*5, NOW(), CURRENT_DATE\c复制代码

就是看起来这样,什么都不会发生。

2. 数据库

查看数据库列表

mysql> SHOW DATABASES;+-----------------------+| Database              |+-----------------------+| information_schema    || mysql                 || performance_schema    || sys                   || test                  |+-----------------------+7 rows in set (0.01 sec)复制代码

选择 test 数据库

mysql> USE test;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changed复制代码

创建数据库 下面的命令将创建并选择 sample 数据库。

mysql> CREATE DATABASE `sample` DEFAULT CHARACTER SET = `utf8mb4`;Query OK, 1 row affected (0.00 sec)复制代码

这里 character set 采用了 utf8mb4,方便以后类似 VARCHAR, LONGTEXT 字段使用 unicode 字符集。

比如要支持 emoji 的话,除了数据库和表的 CHARACTER SETutf8mb4外,还需要将 MySQL 的参数配置中,修改

character_set_server = utf8mb4复制代码

创建数据库表

mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20), species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);Query OK, 0 rows affected (0.01 sec)mysql> SHOW TABLES;+------------------+| Tables_in_sample |+------------------+| pet              |+------------------+1 row in set (0.00 sec)复制代码

查看 pet 表的结构

mysql> DESCRIBE pet;+---------+-------------+------+-----+---------+-------+| Field   | Type        | Null | Key | Default | Extra |+---------+-------------+------+-----+---------+-------+| name    | varchar(20) | YES  |     | NULL    |       || owner   | varchar(20) | YES  |     | NULL    |       || species | varchar(20) | YES  |     | NULL    |       || sex     | char(1)     | YES  |     | NULL    |       || birth   | date        | YES  |     | NULL    |       || death   | date        | YES  |     | NULL    |       |+---------+-------------+------+-----+---------+-------+6 rows in set (0.01 sec)复制代码

从文件中向表中载入数据。

mysql> LOAD DATA LOCAL INFILE '~/sample_pet.txt' INTO TABLE pet    -> LINES TERMINATED BY '\n'复制代码

如果不知道文件换号是什么特殊字符,可以用下面的方式来得到,需要 Python 支持

➜ python3Python 3.6.3 (default, Nov  5 2017, 21:37:14)[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.38)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> f = open('1.txt', 'r')>>> print(f)<_io.TextIOWrapper name='1.txt' mode='r' encoding='UTF-8'>>>> print(f.readlines())['1\n', '2\n']复制代码

插入数据

mysql> INSERT INTO pet    -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);Query OK, 1 row affected (0.01 sec)复制代码

3. 从表中获取数据

SELECT *FROM PETWEHRE NAME != null;复制代码

4. 通过生日计算年龄

mysql> SELECT name, birth, CURDATE(),-> TIMESTAMPDIFF(YEAR, birth, CURDATE()) AS age -> FROM pet ORDER BY name;复制代码

5. 几种函数

  • YEAR() 获取年

  • MONTH() 获取月份

  • DAYOFMONTH() 获取天

  • DATE_ADD() 例如 DATE_ADD(CURDATE(), INTERVAL 1 MONTH) 当前日期加一个月

  • MOD 取模

    mysql> SELECT MOD(13, 11);+-------------+| MOD(13, 11) |+-------------+|           2 |+-------------+复制代码

6. NULL 相关

测试是否为 NULL

  • IS NULL
  • IS NOT NULL

不能使用 = < <> > 来对 NULL 做布尔判读。

在 GROUP BY 和 ORDER BY 语法中,两个 NULL 会被认为相等。

7. 模式匹配

SELECT * FROM pet WHERE name like 'b%';复制代码
  • a% 以 a 为前缀
  • a% 以 a 为后缀
  • _ 精确匹配 N 个字符,N 与 _ 的数量匹配;例如 like '___' 表示精确匹配 3 个字符

支持正则

SELECT * FROM pet WHERE name REGEXP  '^b';SELECT * FROM pet WHERE name REGEXP  'b$';SELECT * FROM pet WHERE name REGEXP  '.....$';  -- 点表示单个字符SELECT * FROM pet WHERE name REGEXP  '.{5}$';复制代码

8. 计数

COUNT(*)

配合 GROUP BY 使用,可以统计每个 field 中,各类值的数量,比如

SELECT	d.amount,	count(d.amount)FROM data dGROUP BY d.amount;|amount| count(d.amount)||------|----------------||  1000|              10||  1200|               9|复制代码

如果想不加 GROUP BY 就可以 SELECT filed_1, count(field_2) 需要将

SET SQL_MODE = 'ONLY_FULL_GROUP_BY';

改为

SET SQL_MODE = '';

转载地址:http://hmrua.baihongyu.com/

你可能感兴趣的文章
【DATAGUARD】手工恢复备库日志中断
查看>>
Kettle访问IDH2.3中的HBase
查看>>
jQuery网页背景灯光闪烁特效
查看>>
【转载】JVM类加载机制小结
查看>>
Android Studio(七):项目从Eclipse到Android Studio迁移
查看>>
在Solr中使用中文分词
查看>>
Eclipse之CTRL+左键直接进入方法函数Implementation
查看>>
groovy/java自实现json解析器(2)JsonObject
查看>>
Linux IP_FORWARD introduce
查看>>
ThinkPHP getBy查询
查看>>
几条简单SQL的系统级抽象
查看>>
保护模式汇编系列之二 - 中断和异常处理
查看>>
使用JavaMail创建邮件和发送邮件
查看>>
【SICP练习】119 练习3.50
查看>>
Android图片压缩(质量压缩和尺寸压缩)
查看>>
nilfs (a continuent snapshot file system) used with PostgreSQL
查看>>
【SICP练习】150 练习4.6
查看>>
HTML(四)
查看>>
Shell脚本 使用sed流编辑器一键修改CentOS网卡IP地址
查看>>
利用pscp和psftp工具,在windows和linux之间传输文件
查看>>