下列例子中用到的数据库表如下:
Websites表:
mysql> SELECT * FROM Websites;
+----+--------------+---------------------------+-------+---------+
| id | name | url | alexa | country |
+----+--------------+---------------------------+-------+---------+
| 1 | Google | https://www.google.cm/ | 1 | USA |
| 2 | 淘宝 | https://www.taobao.com/ | 13 | CN |
| 3 | 菜鸟教程 | http://www.runoob.com/ | 4689 | CN |
| 4 | 微博 | http://weibo.com/ | 20 | CN |
| 5 | Facebook | https://www.facebook.com/ | 3 | USA |
| 7 | stackoverflow | http://stackoverflow.com/ | 0 | IND |
+----+---------------+---------------------------+-------+---------+
access_log表:
mysql> SELECT * FROM access_log;
+-----+---------+-------+------------+
| aid | site_id | count | date |
+-----+---------+-------+------------+
| 1 | 1 | 45 | 2016-05-10 |
| 2 | 3 | 100 | 2016-05-13 |
| 3 | 1 | 230 | 2016-05-14 |
| 4 | 2 | 10 | 2016-05-14 |
| 5 | 5 | 205 | 2016-05-14 |
| 6 | 4 | 13 | 2016-05-15 |
| 7 | 3 | 220 | 2016-05-15 |
| 8 | 5 | 545 | 2016-05-16 |
| 9 | 3 | 201 | 2016-05-17 |
+-----+---------+-------+------------+
9 rows in set (0.00 sec)
apps表:
mysql> SELECT * FROM apps;
+----+------------+-------------------------+---------+
| id | app_name | url | country |
+----+------------+-------------------------+---------+
| 1 | QQ APP | http://im.qq.com/ | CN |
| 2 | 微博 APP | http://weibo.com/ | CN |
| 3 | 淘宝 APP | https://www.taobao.com/ | CN |
+----+------------+-------------------------+---------+
3 rows in set (0.00 sec)
1、常用重要命令
2、【select distinct】查询若干列不同的值
select distict column_name,column_name from table_name;
3、【where】过滤查询【and or between like in】关键词运用
select column_name,column_name from table_name where column_name operator value;
例如:文本字段加'',数值字段不加。
SELECT * FROM emp WHERE country='CN';//查询country为CN的数据
SELECT * FROM emp WHERE id=1;//查询id为1的数据
SELECT * from emp where sal > 2000 and sal < 3000;//查询sal值在2000和3000之间的数据
SELECT * from emp where sal > 2000 or comm > 500;//查询sal值大于2000,或者comm值大于500的数据
//查询sal值大于15且country为CN或USA的数据
SELECT * from emp WHERE sal > 15 AND (country='CN' OR country='USA');
SELECT * from emp where comm is null;//查询comm为null的数据
SELECT * from emp where sal between 1500 and 3000;//查询sal值在1500-3000范围内的数据
SELECT * from emp where sal not between 1500 and 3000;//查询sal值不在1500-3000范围内的数据
SELECT * from emp where sal in (5000,3000,1500);//查询sal值等于三个值中的一个的数据
SELECT * from emp where ename like 'M%';//正则表达式,查询名字以M开头的数据。
4、【order by】用于对结果集按照若干列值排序,默认升序,降序用【desc】
select column_name,column_name from table_name order by column_name,column_name asc|desc;
例如:
select * from Websites order by alexa;//查询Websites表所有数据,并按alexa升序返回。
select * from Websites order by country,alexa;//先按照country排序。若country相同 再按照alexa排列
order by A,B 这个时候都是默认按升序排列
order by A desc,B 这个时候 A 降序,B 升序排列
order by A ,B desc 这个时候 A 升序,B 降序排列
desc 或者 asc 只对它紧跟着的第一个列名有效,其他不受影响,仍然是默认的升序。
5、【insert into】插入新数据
共有两种插入数据的方式(注意values值若是文本字段,需要''单引号包含):
1、无需指定插入数据的列名,只需提供被插入的值。
insert into table_name values (val1,val2,val3,...);
2、需要指定列名及被插入的值。(未被插入的列为默认值)(id字段自动更新,不需插入)
insert into table_name (column1,column2,column3...) values (val1,val2,val3,...);
扩展:
insert into select 和select into from 的区别:
insert into scorebak select * from socre where neza='neza';//插入一行,要求表scorebak 必须存在
select * into scorebak from score where neza='neza';//也是插入一行,要求表scorebak 不存在
6、【update】更新语句
update table_name set column1=val1,column2=val2 where column3=val3;
例如:
update Websites set alexa='5000', country='USA' where name='菜鸟教程';
注意:WHERE 子句规定哪条记录或者哪些记录需要更新。若省略了 WHERE 子句,所有的记录都将被更新!
*在 MySQL 中可以通过设置 sql_safe_updates 这个自带的参数来解决,
*当该参数开启的情况下,你必须在update 语句后携带 where 条件,否则就会报错。
*set sql_safe_updates=1; 表示开启该参数
7、【delete】删除语句
delete from table_name where column1=val1 and column2=val2;
例如:
delete from Websites where name='百度' and country='CN';
注意:
WHERE 子句规定哪条记录或者哪些记录需要删除。如果您省略了 WHERE 子句,所有的记录都将被删除!
*可以在不删除表的情况下,删除表中所有的行。这意味着表结构、属性、索引将保持不变:
delete from table_name;
或
delete * from table_name;