· SQL可以写在一行或者多行。为了提高可读性,各子句分行写,必要时使用缩进。每条命令以;或\g或\G结束
· 关键字不能被缩写也不能分行·关于标点符号
。必须保证所有的()、单引号、双引号是成对结束的。必须使用英文状态下的半角输入方式
。字符串型和日期时间类型的数据可以使用单引号(')表示。列的别名,尽量使用双引号(" "),而且不建议省略asI
-MySQL在 windows环境下是大小写不敏感的MySQL在Linux环境下是大小写敏感的
-数据库名、表名、表的别名、变量名是严格区分大小写的
-关键字、函数名、列名(或字段名)、列的别名(字段的别名)是忽略大小写的。推荐采用统一的书写规范:
-数据库名、表名、表别名、字段名、字段别名等都小写- sQL关键字、函数名、绑定变量等都大写
· DQL 数据查询语言(核心) :select(查询)
· DML 数据操纵语言 :update(改) , insert(增) , delete(删)
· DDL 数据定义语言 :create(创建数据表) , alter (增加数据表),drop(删除数据表)
方式一;source 文件的全路径名
方式二;基于具体的图形化界面的工具可以导入数据
· 条件查询 : where , distinct , 逻辑运算符
分组 :group by having
排序 :order by
USE detest1;
SELECT*FROM emp;
INSERT INTO emp VALUES (1002,'Tom'); # 日期 时间 字符串 等类型的数据要用单引号''来表示
INSERT INTO emp VALUES (1003,'Jerry'); # 最基本的SELECT语句 : SELECT 字段1,字段2,...... FROM 表名
SELECT 1+1,3*2;
SELECT 1+1,3*2 FROM DUAL; # dual : 伪表
# *:表中
USE atguigudb;
SELECT*FROM employees;
SELECT employee_id,last_name,salary FROM employees;
# 列的别名
#as :全称 :alias(别名)
#列的别名可以使用一队"" 引起来
SELECT employee_id emp_id,last_name AS lname,department_id AS "部门id",salary*12 AS "年工资" FROM employees;
# 去除重复行 DISTINCT
SELECT DISTINCT department_id FROM employees;
#错误的:
SELECT salary,DISTINCT department_id FROM employees;
#空值参与运算 null
#NULL参与运算的话 那结果也一定为null
#解决方案就是 IFNULL(commission_pct,0)
# `` 着重号
SELECT*FROM `order`;
# 查询常数
'XXX'
# 显示表结构
DESCRIBE employees;
# 过滤数据
#查询90号部门的员工信息
# 过滤条件,声明在FROM结构的后面
SELECT*FROM employees WHERE department_id=90;
SELECT*FROM employees WHERE last_name='King';
算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加
(+)、减(-)、乘(*)、除(/)和取模(%)运算。
一个整数类型的值对整数进行加法和减法操作,结果还是一个整数;
一个整数类型的值对浮点数进行加法和减法操作,结果是一个浮点数;
加法和减法的优先级相同,进行先加后减操作与进行先减后加操作的结果是一样的;
在Java中,+的左右两边如果有字符串,那么表示字符串的拼接。但是在MySQL中+只表示数
值相加。如果遇到非数值类型,先尝试转成数值,如果转失败,就按0计算。(补充:MySQL
中字符串拼接要使用字符串函数CONCAT()实现)
一个数乘以整数1和除以整数1后仍得原数;
一个数乘以浮点数1和除以浮点数1后变成浮点数,数值与原数相等;
一个数除以整数后,不管是否能除尽,结果都为一个浮点数;
一个数除以另一个数,除不尽时,结果为一个浮点数,并保留到小数点后4位;
乘法和除法的优先级相同,进行先乘后除操作与先除后乘操作,得出的结果相同。
在数学运算中,0不能用作除数,在MySQL中,一个数除以0为NULL。
比较运算符用来对表达式左边的操作数和右边的操作数进行比较,比较的结果为真则返回1,比较的结果
为假则返回0,其他情况则返回NULL。
比较运算符经常被用来作为SELECT查询语句的条件来使用,返回符合条件的结果记录。
逻辑运算符主要用来判断表达式的真假,在MySQL中,逻辑运算符的返回结果为1、0或者NULL。
MySQL中支持4种逻辑运算符如下:
位运算符是在二进制数上进行计算的运算符。位运算符会先将操作数变成二进制数,然后进行位运算,最后将计算结果从二进制变回十进制数。
数字编号越大,优先级越高,优先级高的运算符先进行计算。可以看到,赋值运算符的优先级最低,使用“()”括起来的表达式的优先级最高
正则表达式通常被用来检索或替换那些符合某个模式的文本内容,根据指定的匹配模式匹配文本中符合
要求的特殊字符串。例如,从一个文本文件中提取电话号码,查找一篇文章中重复的单词或者替换用户
输入的某些敏感词语等,这些地方都可以使用正则表达式。正则表达式强大而且灵活,可以应用于非常
复杂的查询。
MySQL中使用REGEXP关键字指定正则表达式的字符匹配模式。下表列出了REGEXP操作符中常用字符匹配
列表。
1. 查询以特定字符或字符串开头的记录 字符‘^’匹配以特定字符或者字符串开头的文本。
在fruits表中,查询f_name字段以字母‘b’开头的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP '^b';
2. 查询以特定字符或字符串结尾的记录 字符‘$’匹配以特定字符或者字符串结尾的文本。
在fruits表中,查询f_name字段以字母‘y’结尾的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'y$';
3. 用符号"."来替代字符串中的任意一个字符 字符‘.’匹配任意一个字符。 在fruits表中,查询f_name字段值
包含字母‘a’与‘g’且两个字母之间只有一个字母的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'a.g';
4. 使用"*"和"+"来匹配多个字符 星号‘*’匹配前面的字符任意多次,包括0次。加号‘+’匹配前面的字符至
少一次。
在fruits表中,查询f_name字段值以字母‘b’开头且‘b’后面出现字母‘a’的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP '^ba*';
在fruits表中,查询f_name字段值以字母‘b’开头且‘b’后面出现字母‘a’至少一次的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP '^ba+';
5. 匹配指定字符串 正则表达式可以匹配指定字符串,只要这个字符串在查询文本中即可,如要匹配多个
字符串,多个字符串之间使用分隔符‘|’隔开。
在fruits表中,查询f_name字段值包含字符串“on”的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'on';
在fruits表中,查询f_name字段值包含字符串“on”或者“ap”的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'on|ap';
之前介绍过,LIKE运算符也可以匹配指定的字符串,但与REGEXP不同,LIKE匹配的字符串如果在文本中
间出现,则找不到它,相应的行也不会返回。REGEXP在文本内进行匹配,如果被匹配的字符串在文本中
出现,REGEXP将会找到它,相应的行也会被返回。对比结果如下所示。
在fruits表中,使用LIKE运算符查询f_name字段值为“on”的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name like 'on';
Empty set(0.00 sec)
6. 匹配指定字符中的任意一个 方括号“[]”指定一个字符集合,只匹配其中任何一个字符,即为所查找的
文本。
在fruits表中,查找f_name字段中包含字母‘o’或者‘t’的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP '[ot]';
在fruits表中,查询s_id字段中包含4、5或者6的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE s_id REGEXP '[456]';
7. 匹配指定字符以外的字符 “[^字符集合]” 匹配不在指定集合中的任何字符。
在fruits表中,查询f_id字段中包含字母a~e和数字1~2以外字符的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_id REGEXP '[^a-e1-2]';
8. 使用{n,}或者{n,m}来指定字符串连续出现的次数 “字符串{n,}”表示至少匹配n次前面的字符;“字符串
{n,m}”表示匹配前面的字符串不少于n次,不多于m次。例如,a{2,}表示字母a连续出现至少2次,也可以
大于2次;a{2,4}表示字母a连续出现最少2次,最多不能超过4次。
在fruits表中,查询f_name字段值出现字母‘x’至少2次的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'x{2,}';
在fruits表中,查询f_name字段值出现字符串“ba”最少1次、最多3次的记录,SQL语句如下:
mysql> SELECT * FROM fruits WHERE f_name REGEXP 'ba{1,3}';