语法:

SELECT 属性列表
       FROM 表名或视图名
       [ WHERE 条件表达式1 ]
       [ GROUP BY 属性名1 [ HAVING 条件表达式2 ] [ WITH ROOLUP ] ]
       [ ORDER BY 属性名2 [ ASC|DESC ] ]

条件表达式1:指定查询条件
条件表达式2:满足该表达式的结果才能输出
WITH ROLLUP:在所有记录的最后增加一条记录,包含上面记录的总和
单独使用GROUP BY 查询结果只显示一个分组的记录,所以它通常和集合函数一起使用
查询条件:
比较 =、<、<=、>、>=、!=、<>、!<、!>
指定范围 BETWEEN AND、NOT BETWEEN AND
指定集合 IN、NOT IN
匹配字符 LIKE、NOT LIKE(只能匹配字符串,%代表任意长度,_代表单个字符)
是否为空值 IS NULL、IS NOT NULL
多个查询条件 AND、OR
限制条件 LIMIT

(一)普通查询
## 查询所有字段
SELECT * FROM grade;
## 查询指定字段
SELECT course FROM grade;
## 查询指定记录
SELECT * FROM grade WHERE num=1;
## 查询指定集合内的记录
SELECT * FROM grade WHERE course IN('语文','数学');
## 查询指定范围内的记录
SELECT * FROM grade WHERE age BETWEEN 18 AND 19 ;
## 匹配查询
SELECT * FROM grade WHERE course LIKE '英%';
## 查询空值
SELECT * FROM grade WHERE score IS NULL;
## 多条件查询
SELECT * FROM grade WHERE score>90 AND sex= 'M';
SELECT * FROM grade WHERE score<90 OR sex= 'F';
## 查询结果不重复
SELECT DISTINCT num FROM grade;
## 对结果排序(支持多字段排序,先按第一个字段排序,第一个字段相等时再按第二个字段排序)
SELECT * FROM grade ORDER BY score DESC;
SELECT * FROM grade ORDER BY num DESC, score ASC;

## 分组查询
#单独使用GROUP BY时,只显示分组结果第一个,无实际意义,一般与集合函数一起使用
SELECT * FROM grade GROUP BY sex;
#与GROUP_CONCAT()一起使用,显示每个分组的字段,一个语句使用只使用一个
语法:
GROUP_CONCAT( [DISTINCT] 属性名 [ORDER BY 属性名 ASC|DESC] [SEPARATOR ‘;|,’] )
SELECT sex,GROUP_CONCAT(name) FROM grade GROUP BY sex;
#与集合函数一起使用,COUNT() SUM() AVG() MAX() MIN()
SELECT sex,COUNT(sex) FROM grade GROUP BY sex;
SELECT num,SUM(score) FROM grade GROUP BY num;
#HAVING一起使用,该关键字用于选择满足条件的分组
SELECT sex, COUNT(sex) FROM grade GROUP BY sex HAVING COUNT(sex)>3;
## 限制查询数量
SELECT * FROM grade LIMIT 2;(前两个)
SELECT * FROM grade LIMIT 2,3;(从第2个位置起(不含),显示之后3个记录)
(二)使用集合函数查询
## 使用COUNT()函数查询记录数
SELECT COUNT(*) FROM employee;
SELECT d_id,COUNT(*) FROM employee GROUP BY d_id;
## 使用SUM()函数,该函数只适用于数值型字段
SELECT num,SUM(score) FROM grade GROUP BY num;
## 使用AVG()函数
SELECT course,AVG(score) FROM grade GROUP BY course;
## 使用MAX()和MIN()函数,可对字符串排序,a最新,z最大,依次排序直至结果
SELECT MAX(age) FROM grade;
SELECT MIN(age) FROM grade;
(三)连接查询
将两个及以上的表按某个条件连接起来,选取数据。不同的表中存在表示相同意义的字段时,可以通过该字段连接这些表。
1. 内连接查询,只查询出指定字段取值相同的记录
SELECT num,name,employee.d_id,age,sex,d_name,function
FROM employee,department
WHERE employee.d_id=department.d_id;
2. 外连接查询
语法:
SELECT 属性名列表
       FROM 表名1 LEFT|RIGHT JION 表名2
       ON 表名1.属性名1=表名2.属性名2;

## 左连接,可以查询表名1中的所有记录和表名2中的匹配记录
SELECT num,name,employee.d_id,age,sex,d_name,function
FROM employee LEFT JION department
ON employee.d_id=department.d_id;

## 右连接,可以查询表名2中的所有记录和表名1中的匹配记录
SELECT num,name,employee.d_id,age,sex,d_name,function
FROM employee.d_id=department.d_id;

3. 复合条件连接查询
SELECT num,name,employee.d_id,age,sex,d_name,function
FROM employee,department
WHERE employee.d_id=department.d_id  AND age>24;

(四)子查询,即将一个查询语句嵌套在另一个查询语句中
1. 带IN关键字的子查询,即一个查询语句的条件可能落在另一个SELECT语句的查询结果中
## 查询employee中的记录,且记录d_id的字段值必须在department表中出现过
SELECT * FROM employee 
WHERE d_id IN
 (SELECT d_id FROM department);
## 查询employee中的记录,且记录d_id的字段值必须没有在department表中出现过
SELECT * FROM employee 
WHERE d_id NOT IN
(SELECT d_id FROM department);

2. 带比较运算符的子查询
## 查询到一等奖学金(level 1)最低分数90分
SELECT * FROM scholarship;
## 查询满足一等奖学金的学生
SELECT id,name,score FROM computer_stu
WHERE score >=
(SELECT score FROM scholarship WHERE level=1);3. 带EXISTS和NOT EXISTS关键字的子查询,内层查询语句不返回查询记录,而是返回一个真假值;当内存查询语句返回true时,外层查询语句将进行查询,否则不进行查询或查询不出任何记录

SELECT * FROM employee
WHERE EXISTS
( SELECT d_name FROM department WHERE d_id=1003);

上述查询语句中,内查询语句返回结果为true,所以外层查询语句执行
4. 带ANY关键字的子查询,只要满足内层查询语句返回结果中的任何一个,就可以通过该条件来执行外层查询语句。
  ANY通常与比较运算符一起使用,>ANY表示大于任何一个值,=ANY表示等于任何一个值
## 
SELECT * FROM computer_stu
WHERE score >=ANY (SELECT score FROM scholarship)

5. 带ALL关键字的子查询
## 查询分数大于所有奖学金最低分的学生信息
SELECT * FROM computer_stu  WHERE score>=ALL  (SELECT score FROM scholarship);

(五)合并查询结果
将多个查询结果合并到一起显示。UNION,将所有查询结果合并到一起,然后去掉相同的记录;UNION ALL 关键字只是简单合并到一起。
语法:
SELECT 语句1
   UNION|UNION ALL
SELECT 语句2
 ……;
两个语句之间用UNION或UNION ALL连接
## 将department和employee表中的d_id字段合并到一起
SELECT d_id FROM department
       UNION
SELECT d_id FROM employee;

SELECT d_id FROM department
       UNION ALL
SELECT d_id FROM employee;

(六)为表和字段去别名
1. 为表取别名,可在查询中使用别名查询,单必须保证该数据库中没有其他表与该别名相同
语法:
表名 表的别名
SELECT * FROM department d  WHERE d.d_id=1001;
2. 为字段取别名
属性名 [AS] 别名
查询结果会直接显示字段的别名,但必须保证该表中没有其他字段与该别名相同
SELECT d_id AS department_id, d_name AS department_name   FROM department;

(七)使用正则表达式查询
语法:
属性名 REGEXP ‘匹配方式’
正则表达式的模式字符 含义
^ 匹配字符串开始的部分
$ 匹配字符串结束的部分
. 代表字符串中任意一个字符,包括回车和换行
[字符集合] 匹配”字符集合”中的任何一个字符
[^字符集合] 匹配除了“字符集合”以外的任何一个字符
S1|S2|S3 匹配S1、S2和S3中的任意一个字符串
* 代表多个该符号之前的字符,包括0和1个
+ 代表多个该符号之前的字符,包括1个
字符串{N} 字符串出现N次
字符串{M,N} 字符串出现至少M次,最多N次


1. 查询以特定字符或字符串开头的记录
## 查询name字段以L开头的记录
SELECT * FROM computer_stu WHERE name REGEXP '^L';
2. 查询以特定字符或字符串结尾的记录
## 查询name字段以m结尾的记录
SELECT * FROM computer_stu WHERE name REGEXP 'm$';
3. 用符号”.”来代替字符串中的任意一个字符
## 查询name字段以L开头,y结尾,中间有两个字符的记录
SELECT * FROM computer_stu WHERE name REGEXP '^L..y$';4. 匹配字符串中的任意一个
4. 匹配指定字符意外的字符
## 查询name字段中含有a和n任意一个字符的记录
SELECT * FROM computer_stu WHERE name REGEXP '[An]';
5. 匹配指定字符串
SELECT * FROM computer_stu WHERE name REGEXP 'ic';
6. 用“*”和“+”来匹配多个字符
## 查询name字段中字符c之前出现过a的记录,*表示≥0个,+表示>1个
SELECT * FROM computer_stu WHERE name REGEXP 'a*c';
SELECT * FROM computer_stu WHERE name REGEXP 'a+c';

命令

访问监控器:mysql -u [username] -p;(会提示密码)

显示所有的数据库: show databases;

Access数据库:mysql -u [username] -p [database](会提示密码)

创建新的数据库: create database [database];

选择数据库: use [database];

确定是使用什么数据库: select database();

显示所有表: show tables;

显示表结构: describe [table];

列表中的某个表的所有索引: show index from [table];

创建列的新表: CREATE TABLE [table] ([column] VARCHAR(120), [another-column] DATETIME);

添加一列: ALTER TABLE [table] ADD COLUMN [column] VARCHAR(120);

添加列具有独特的自动递增ID: ALTER TABLE [table] ADD COLUMN [column] int NOT NULL AUTO_INCREMENT PRIMARY KEY;

插入一条记录: INSERT INTO [table] ([column], [column]) VALUES ('[value]', [value]');

MySQL的功能输入的日期时间: NOW()

查看记录: SELECT * FROM [table];

说明记录: EXPLAIN SELECT * FROM [table];

选择记录部分: SELECT [column], [another-column] FROM [table];

计数记录: SELECT COUNT([column]) FROM [table];

计数并选择分组记录: SELECT *, (SELECT COUNT([column]) FROM [table]) AS count FROM [table] GROUP BY [column];

选择特定的记录:SELECT * FROM [table] WHERE [column] = [value];(选择器:<>!=,合并多个选择与ANDOR

含选择的记录[value]SELECT * FROM [table] WHERE [column] LIKE '%[value]%';

首先是选择的记录[value]SELECT * FROM [table] WHERE [column] LIKE '[value]%';

首先是选择记录val和结尾ueSELECT * FROM [table] WHERE [column] LIKE '[val_ue]';

选择一个范围: SELECT * FROM [table] WHERE [column] BETWEEN [value1] and [value2];

与客户订单和唯一的限制选择:SELECT * FROM [table] WHERE [column] ORDER BY [column] ASC LIMIT [value];(排序:DESCASC

更新记录: UPDATE [table] SET [column] = '[updated-value]' WHERE [column] = [value];

删除记录: DELETE FROM [table] WHERE [column] = [value];

删除所有记录从一个表(不删除表本身): DELETE FROM [table]; (这也将重置自动生成的,就像一个id列列递增计数器。)

删除表中的所有记录: truncate table [table];

删除表列: ALTER TABLE [table] DROP COLUMN [column];

删除表: DROP TABLE [table];

删除数据库: DROP DATABASE [database];

自定义列输出名称: SELECT [column] AS [custom-column] FROM [table];

导出数据库转储(更多信息点击这里mysqldump -u [username] -p [database] > db_backup.sql

使用--lock-tables=false的锁定表(更多信息选项这里)。

导入数据库转储(更多信息点击这里mysql -u [username] -p -h localhost [database] < db_backup.sql

登出: exit;

聚合函数

选择但不重复: SELECT distinct name, email, acception FROM owners WHERE acception = 1 AND date >= 2015-01-01 00:00:00

计算记录总数: SELECT SUM([column]) FROM [table];

算上总数[column]由和组[category-column]SELECT [category-column], SUM([column]) FROM [table] GROUP BY [category-column];

获得最大的价值[column]SELECT MAX([column]) FROM [table];

获取最小值: SELECT MIN([column]) FROM [table];

获取平均值: SELECT AVG([column]) FROM [table];

找圆润的平均值和组[category-column]SELECT [category-column], ROUND(AVG([column]), 2) FROM [table] GROUP BY [category-column];

多个表

从多个表中选择: SELECT [table1].[column], [table1].[another-column], [table2].[column] FROM [table1], [table2];

结合不同表行: SELECT * FROM [table1] INNER JOIN [table2] ON [table1].[column] = [table2].[column];

从不同的表合并行,但不需要连接条件:SELECT * FROM [table1] LEFT OUTER JOIN [table2] ON [table1].[column] = [table2].[column];(左表是出现在语句中的第一个表。)

使用重命名列或表的别名SELECT [table1].[column] AS '[value]', [table2].[column] AS '[value]' FROM [table1], [table2];

用户功能

列出所有用户: SELECT User,Host FROM mysql.user;

创建新用户: CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

授予ALL访问用户为*表:GRANT ALL ON database.* TO 'user'@'localhost';

找出Mysql的主机的IP地址

SHOW VARIABLES WHERE Variable_name = 'hostname';

来源于:https://gist.github.com/hofmannsven/9164408#commands

mysql 一些基础的语法和命令的更多相关文章

  1. mysql常用基础操作语法(十一)~~字符串函数【命令行模式】

    注:sql的移植性比较强,函数的移植性不强,一般为数据库软件特有,例如mysql有mysql的函数,oracle有oracle的函数. 1.concat连接字符串: 从上图中可以看出,直接使用sele ...

  2. mysql常用基础操作语法(十二)~~常用数值函数【命令行模式】

    数值函数是常用函数之一,也是学习mysql必会的,常用的有如下一些: 1.ceil:返回大于某个数的最小整数值: 2.floor:和上一个相反,返回小于某个数的最大整数值: 3.round:返回某个数 ...

  3. mysql常用基础操作语法(十)~~子查询【命令行模式】

    mysql中虽然有连接查询实现多表连接查询,但是连接查询的性能很差,因此便出现了子查询. 1.理论上,子查询可以出现在查询语句的任何位置,但实际应用中多出现在from后和where后.出现在from后 ...

  4. mysql常用基础操作语法(九)~~外连接查询【命令行模式】

    1.左外连接left outer join或者left jion,outer可以省略不写,下边的右连接和全连接也一样: 左外连接的意思是,以left join左边的表中的数据为基准,即左边的表中有的必 ...

  5. mysql常用基础操作语法(四)--对数据的简单无条件查询及库和表查询【命令行模式】

    1.mysql简单的查询:select 字段1,字段2...  from tablename; 如果字段那里写一个*,代表查询所有的字段,等同于指定出所有的字段名,因此如果要查询所有字段的数据,一般都 ...

  6. mysql常用基础操作语法(八)~~多表查询合并结果和内连接查询【命令行模式】

    1.使用union和union all合并两个查询结果:select 字段名 from tablename1 union select 字段名 from tablename2: 注意这个操作必须保证两 ...

  7. mysql常用基础操作语法(七)--统计函数和分组查询【命令行模式】

    注:文中所有的...代表多个. 1.使用count统计条数:select count(字段名...) from tablename; 2.使用avg计算字段的平均值:select avg(字段名) f ...

  8. mysql常用基础操作语法(六)--对数据排序和限制结果数量的条件查询【命令行模式】

    1.使用order by对查询的结果进行排序,asc升序,desc降序: 也可以在order by后指定多个字段名和排序方式进行多级排序: 2.使用limit限制查询结果的数量: 上图中的0,代表查询 ...

  9. mysql常用基础操作语法(五)--对数据的简单条件查询【命令行模式】

    1.单条件查询:select 字段名 from tablename where 条件: 2.简单多条件查询,使用&&或者between and等: 3.is null和is not n ...

随机推荐

  1. velocityjs 动画库 比jquery默认的animate强

    神坑记录: 1.transform: translate3d(80%,0,0); 无法作为参数,必须修改为这种:translateX: 0% 官方文档 http://velocityjs.org/ g ...

  2. VC++6.0编译器标记的那些内存值

    栈内存初始值 0xcccccccc 和-858993460.   二者是一样的, 一个是16进制, 另一个是10进制

  3. PNG格式的图像文件,创建的图像的MIME类型的头部

    在安装完这三个组件后,还需要重新配置一次PHP,这也是你对采用DSO方式安装PHP感到庆幸的地方之一.运行make clean,然后在当前的配置中添加下面的内容: --with-gd=[/path/t ...

  4. IOS第一天多线程-03线程间通信

    **** #import "HMViewController.h" @interface HMViewController () @property (weak, nonatomi ...

  5. IOS第15天(2,事件处理hitTest练习)

    ***hitTest 获取最合适的点 @implementation HMGreenView - (void)touchesBegan:(NSSet *)touches withEvent:(UIEv ...

  6. Oracle 常用数据类型(转)

    varchar2(6) 张三 --在jbk中是两个字节,在utm中是三个字节char(6) 张 三 --可以确定长度的用charclob --大存储,没事少用,当多余4000字节时,会用lob来存储, ...

  7. Objective-C 中类属性(修饰)

    Objective-C 中类属性(修饰) (2013-07-13 14:38:35) 转载▼ 标签: it 分类: IOS笔记 nonatomic: 非原子性访问,对属性赋值的时候不加锁,多线程并发访 ...

  8. 在eclipse中将SVN项目check下来的正确步骤

    学习下面的方法后再也不用从svncheck到本地后再导入到eclipse里了. 1. 首先Import,在弹出框里选择SVN-从SVN检出项目,然后按照提示一步一步直到选中了目标项目,然后点击next ...

  9. fuelux.tree用法

    ACE中带了一个树,样式和操作挺好看的,就是难用,下面记录下如何使用. 首先fuelux.tree接受的数据源是Json,关键这个Json还不怎么标准,可接受的Json示例如下: { '刑侦': { ...

  10. Nginx下Magento伪静态规则,适用于LNMP一键包

    文件名为:magento.conf(下载),将其放在 /usr/local/nginx/conf/ 文件夹下 然后在 /usr/local/nginx/conf/vhost/www.yourname. ...