mysql查询语句
mysql查询语句
常用SELECT命令
打印当前的日期和时间
select now();
打印当前的日期
select curdate();
打印当前时间
select curtime();
查看当前版本
select version();
打印当前用户
select user();
查看当前数据库实例
select database();
查看系统中可用的变量
show variables;
查看系统中全局变量
show global variables;
一般查询系统可用变量或是全局变量都是通过like的方式来进行查询的,因为普通查询的内容查询的特别多,通过like模糊查询的方式来进行查询,查询的结果进行展示
show global variables like '%version%'; 把全局变量中含有version的字样全部进行展示
查看默认存储引擎
show variables like '%storage_engine%';
mysql> show variables like '%storage_engine%';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| default_storage_engine | InnoDB |
| storage_engine | InnoDB |
+------------------------+--------+
如果需要将存储引擎进行修改则使用下面的命令对存储引擎进行修改就行
set storage_engine=MyISAM 这个就是表示将存储引擎进行修改的方法
修改后的存储引擎展示
mysql> show variables like '%storage_engine%';
+------------------------+--------+
| Variable_name | Value |
+------------------------+--------+
| default_storage_engine | MyISAM |
| storage_engine | MyISAM |
+------------------------+--------+
总结
mysql中的变量的值都是可以通过set这个来进行设置的,也就是说可以通过set来进行修改
查看支持的存储引擎
show engines;
mysql> show engines;
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
+--------------------+---------+------------------------------------------------------------+--------------+------+------------+
6 rows in set (0.00 sec)
查看系统运行状态
show status;
查看系统线程数
show status like '%Thread%';
yum安装的mysql默认的字符集是latain1
编译安装的mysql是utf-8的字符集
导出,导入数据库
导出表示做了一个数据库备份
导入表示做了一个数据库还原
导入数据库
导入数据库前必须创建一个空数据库
create database book; 创建数据库
mysql -usystem -p123456 book<book.sql 把book.sql内容导入到刚才建立的book这个库里面
反过来
mysql -usystem -p123456 book<book.sql 把book这个库里面的内容导出到book.sql这个文件里面
进入数据库删除表使用drop
drop table books;
方法2 :类似于将sql脚本跑了一遍
create database book;
use book;
source /root/book.sql #sql脚本路径
show tables;
导出数据库
使用mysqldump 默认存在
[root@zyg ~]# ll /usr/local/mysql/bin/mysqldump
-rwxr-xr-x 1 mysql mysql 4702840 Sep 30 22:13 /usr/local/mysql/bin/mysqldump
导出数据库:mysql -u用户名 -p密码 数据库名 > 导出的文件名
mysqldump -usystem -p123456 book>/home/zyg.sql 将book这个database导出到/home/zyg.sql这个文件里面,这个表示的是将整个实例进行导出
这个是在linux系统里面进行执行的
方法2:在数据库里面进行执行
首先进入数据库
mysql -usystem -p123456
然后在进入database里面
use books 进入books这个database
select * into outfile '/tmp/123.txt' from books; 将books这张表里面的内容全部进行导出到/tmp/123.txt这个文件里面。这个可以理解为select * from books 将books这张表里面的内容都查询出来,然后into outfile到/tmp/123.txt这个文件里面去,这个是将单张表里面的内容导出来,导出来的路径必须是mysql能够进行访问的路径才行,所以放在tmp这个路径下面
sql语句进阶
查看表的内容
select * from books;
select * from category;
逻辑运算符
and or not
and 且
or 或
not 非
选择出书籍价格为(30,40,50,60)的记录,只显示书籍名称,出版社,价格
mysql> select bName,publishing,price from books where price=30 or price=40 or price=50 or price=60;
多条件用and连接
不等于符号:!= 或是 <> 使用这两个符号来进行表示不等于的意思
not配合使用,比如说配合not like来进行使用等等
算术运算符:
= 等于
<> 不等于 !=
> 大于
< 小于
>= 大于等于
<= 小于等于
in 运算符
IN 运算符用于 WHERE 表达式中,以列表项的形式支持多个选择,语法如下:
WHERE column IN (value1,value2,...)
WHERE column NOT IN (value1,value2,...)
mysql> select bName,publishing,price from books where price in (30,40,50,60); 条件查询语句可以使用in,只要where条件语句在in的范围之内中的任意一个就能进行执行
Not in 与in相反
当 IN 前面加上 NOT 运算符时,表示与 IN 相反的意思,即不在这些列表项内选择
mysql> select bName,publishing,price from books where price not in (30,40,50,60);
查询价格大于60的记录
select bName,price from books where price>60;
select bName,price from books where price=60;
select bName,price from books where price<>60;
or
select bName,price from books where price!=60;
找出价格为50,60,70的书
select bName,price from books where price in (50,60,70);
找出价格不为50,60,70的书
select bName,price from books where price not in (50,60,70);
排序
升序:order by “排序的字段” asc 默认
降序:oredr by “排序的字段” desc
升序
select bName,price from books where price in (50,60,70) order by price asc;
降序
select bName,price from books where price in (50,60,70) order by price desc;
多组排序是先按照前面的那个排序条件进行排序
select bName,price from books where price in (50,60,70) order by price desc,bNa
me asc; 那么这个排序的方式是先按照price的顺序进行排序,先进行最前面的进行排序,可以满足多个字段排序
范围运算:
[not]between......and.....
Between and 可以使用大于小于的方式来代替,并且使用大于小于意义表述更明确,这个有时候会表述不明确,平时都是使用下面的表示方法
一般使用下面的符号进行表示
(30,60)表示30和60之间的数字但是不包括30和60 >30 and <60
[30,60] 表示30和60之间的数字并且包括30和60 >=30 and <=60
select bName,price from books where price >=30 and price <= 60 order by price d
esc;
select bName,price from books where price between 30 and 60 order by price des
c;
上面这两条语句的意思是一样的,但是一般都是使用上面的那条语句
模糊匹配查询:
字段名 [not]like '通配符' ----》% 任意多个字符
mysql子查询
概念:在select 的where条件中又出现了select
查询中嵌套着查询
select bName,bTypeId from books where bTypeId in (select bTypeId from category where bTypeName in ('黑客','网络技术')); 多表之间的子查询语句
LIMIT 限定显示的条目:通过limit来进行条件查询,limit进行取值查询
select * from table limit [offset,]rows
偏移量 行数
LIMIT 子句可以被用于强制 SELECT 语句返回指定的记录数。LIMIT 接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量,第二个参数指定返回记录行的最大数目。初始记录行的偏移量是 0(而不是 1):
offset表示的是偏移量,默认是0,表示不偏移
比如select * from table limit m,n语句
表示其中m是指记录开始的index,从0开始,表示第一条记录
n是指从第m+1条开始,取n条。
mysql> select * from category limit 1,5; 这个表示除去第一个,从第二个开始找5行
+---------+--------------+
| bTypeId | bTypeName |
+---------+--------------+
| 2 | 网站 |
| 3 | 3D动画 |
| 4 | linux学习 |
| 5 | Delphi学习 |
| 6 | 黑客 |
+---------+--------------+
查看所有书籍中价格中最低的三条记录
我们对所有记录排序以升序排列,取出前面3个来
mysql> select bName,price from books order by price asc limit 0,3;
我们将子查询和限制条目,算术运算结合起来查询
显示字段bName ,price ;条件:找出价格比电子工业出版社出版的书中最便宜还便宜。
针对这种查询,我们一步步的来,先找出电子工业出版社出版中最便宜的书
mysql> select bName,price from books where publishing="电子工业出版社" order by price asc limit 0,1;
mysql> select bName,price from books where price<(select price from books where publishing="电子工业出版社" order by price asc limit 0,1);
或者
多行子查询: all表示小于子查询中返回全部值中的最小值
mysql> select bName,price from books where price<all(select price from books where publishing="电子工业出版社");
连接查询
以一个共同的字段,求两张表当中符合条件的并集。 通过共同字段把这两张表连接起来。
常用的连接:
右边的表关联到左边的表,以左边的表为基准这个叫做左连接,反过来叫右连接
内连接:根据表中的共同字段进行匹配
外连接分两种:左外连接、右外链接。
内连接 inner
语法:
select 字段 from 表1 inner join 表2 on 表1.字段=表2.字段
select 字段 from [表1 inner join 表2] on 条件
内连接:根据表中的共同字段进行匹配