MYSQL学习(二)

MYSQL学习(二)

操作MySQL数据库

向表中插入数据

insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:

insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (1, 2, 3, ...);

其中 [] 内的内容是可选的, 例如, 要给 samp_db 数据库中的 students 表插入一条记录, 执行语句:

insert into students values(NULL, "王刚", "", 20,"13811371377");

按回车键确认后若提示 Query Ok, 1 row affected(0.05 sec) 表示数据插入成功。 若插入失败请检查是否已选择需要操作的数据库。

有时我们只需要插入部分数据, 或者不按照列的顺序进行插入, 可以使用这样的形式进行插入:

insert intostudents (name, sex, age) values("孙丽华", "女", 21);

查询表中的数据

select 语句常用来根据一定的查询规则到数据库中获取数据, 其基本的用法为:

select 列名称 from 表名称 [查询条件];

例如要查询students 表中所有学生的名字和年龄, 输入语句select name, age from students; 执行结果如下:

       mysql>select name, age from students;

       +--------+-----+

       |name   | age |

       +--------+-----+

       |王刚   |  20|

       |孙丽华 |  21 |

       |王永恒 |  23 |

       |郑俊杰 |  19 |

       |陈芳   |  22|

       |张伟朋 |  21 |

       +--------+-----+

       6rows in set (0.00 sec)

也可以使用通配符* 查询表中所有的内容, 语句: select * fromstudents;

检索不同的行的用法:使用关键字DISTINCT

SELECT DISTINCT vend_id FROM products;

返回指定的行数的用法:使用关键字LIMIT 后跟一个指定的行数

SELECTprod_name FROM products LIMIT 5

返回从指定行开始到指定行数结束的内容:使用关键字LIMIT 后跟两个指定的数字,第一个表示开始的行号,第二个表示需要显示的行数。

SELECTprod_name FROM products LIMIT 5,5

排序数据使用ORDERBY子句

SELECTprod_name FROM products ORDER BY prod_name

按多个列排序:

SELECTprod_id,prod_price,prod_name FROM products ORDER BY prod_price,prod_name;

按价格降序排序产品:降序使用了关键字DESC。

SELECTprod_id, prod_price, prod_name FROM products ORDER BY prod_price DESC;

多列排序,首先价格按照降序排序,然后名字按默认升序排序。DESC关键字只应用到直接位于其前面的列名。相对应的有升序关键字ASC(默认值)

SELECT prod_id,prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;

演示如何找出最昂贵物品的值:注意子句的顺序。

SELECTprod_price FROM products ORDER BY prod_price DESC LIMIT 1;

按特定条件查询:

where 关键词用于指定查询条件, 用法形式为: select 列名称 from 表名称 where 条件;

以查询所有性别为女的信息为例, 输入查询语句: select * from students wheresex="女";

where 子句不仅仅支持"where 列名 = 值" 这种名等于值的查询形式, 对一般的比较运算的运算符都是支持的, 例如 =、>、<、>=、<、!= 以及一些扩展运算符 is [not] null、in、like等等。 还可以对查询条件使用 or 和 and 进行组合查询, 以后还会学到更加高级的条件查询方式, 这里不再多做介绍。

示例:

查询年龄在21岁以上的所有人信息: select * from students where age > 21;

查询名字中带有"王" 字的所有人信息: select *from students where name like "%王%";

查询id小于5且年龄大于20的所有人信息:select * from students where id<5 and age>20;

简单相等测试:

SELECTprod_name, prod_price FROM products WHERE prod_price = 2.50;

WHERE子句的操作符请注意:不等于有两种表示 <>或者!=,还有一个操作符是BETWEEN.

SELECTprod_name, prod_price FROM products WHERE prod_name = 'fuses';

SELECTprod_name, prod_price FROM products WHERE prod_price < 10;

SELECTprod_name, prod_price FROM products WHERE vend_id <> 1003;

SELECTprod_name, prod_price FROM products WHERE prod_price BETWEEN 5 AND 10;

空值检查:

SELECTprod_price FROM products WHERE prod_price IS NULL;

组合WHERE子句:

SELECTprod_id, prod_price, prod_name FROM products WHERE vend_id = 1003 ANDprod_price <= 10;

计算顺序:

SELECTprod_name, prod_price FROM products WHERE vend_id = 1002 OR vend_id = 1003 ANDprod_price >= 10;

SELECTprod_name, prod_price FROM products WHERE (vend_id = 1002 OR vend_id = 1003)AND prod_price >= 10;

AND的优先级高于OR,所以上面的两条语句执行的结果不一样。遇到多子句的时候需要使用圆括号明确地分组相应的操作符。

IN操作符:用来指定条件范围,在范围中的每个条件都可以进行匹配。IN中可以包含其他SELECT语句。

SELECTprod_name, prod_price FROM products WHERE vend_id IN (1002, 1003) ORDER BYprod_name;

NOT操作符:否定它之后所跟的任何条件:

SELECTprod_name, prod_price FROM products WHERE vend_id NOT IN (1002, 1003) ORDER BY prod_name;

用通配符过滤:

%是百分号通配符,表示任何字符出现任意次数(0,1,或者多个),注意%不能够匹配NULL值。

SELECTprod_name, prod_price FROM products WHERE prod_name LIKE 'jet%';

搜索任意以jet起头的词。

SELECTprod_id,prod_name, prod_price FROM products WHERE prod_name LIKE '%anvil%';

搜索任意位置包含anvil的值。

SELECTprod_name FROM products WHERE prod_name LIKE 's%e';  

(_)是下划线通配符,表示匹配单个字符,要求一个字符不能多也不能少。

SELECTprod_id, prod_name FROM products WHERE prod_name LIKE '_ ton anvil';

用正则表达式搜索:

REGEXP关键字告诉MySQL:REGEXP后所跟的东西作为正则表达式处理。

SELECT prod_name FROMproducts WHERE prod_name REGEXP '1000' ORDER BY prod_name;

SELECTprod_name FROM products WHERE prod_name REGEXP '.000' ORDER BY prod_name;

.是正则表达式中一个特殊的字符。它表示匹配任意一个字符。

SELECTprod_name FROM products WHERE prod_name REGEXP '1000|2000' ORDER BY prod_name;

|是正则表达式的OR操作符。它表示匹配其中之一。

SELECTprod_name FROM products WHERE prod_name REGEXP '[123] Ton' ORDER BY prod_name;

[ ]是另一种形式的OR语句,它表示匹配123其中之一

SELECTprod_name FROM products WHERE prod_name REGEXP '[^123] Ton' ORDER BY prod_name;

^表示否定,[^123]表示匹配除了123这些字符外的任何东西。

SELECTprod_name FROM products WHERE prod_name REGEXP '[1-5] Ton' ORDER BY prod_name;

-用来定义一个范围,[0123456789]=[0-9]

[a-z]匹配任意字母字符。

SELECTvend_name FROM vendors WHERE vend_name REGEXP '\\.' ORDER BY vend_name;

转义:为了匹配特殊字符,比如., |, -, [],必须使用\\为前导,\\-表示查找-,\\.表示查找.,\\\匹配反斜杠\本身。

重复元字符:

*  0个或多个匹配

+  1个或多个匹配(等于{1,})

?  0个或1个匹配(等于{0,1})

{n}  指定数目的匹配

{n,}  不少于指定数目的匹配

{n,m}  匹配数目的范围(m不超过255)

SELECT prod_name FROM products WHEREprod_name REGEXP '\\([0-9] sticks?\\)' ORDER BY prod_name;

+----------------+

| prod_name   |

+----------------+

| TNT (1 stick)  |

| TNT (5 sticks) |

+----------------+

SELECT prod_name FROM products WHEREprod_name REGEXP '[[:digit:]]{4}' ORDER BY prod_name;

注意使用的正则表达式[[:digit:]]{4}有两层中括号[[]],如果少一层,查询不到结果。

+--------------+

| prod_name   |

+--------------+

| JetPack 1000 |

| JetPack 2000 |

+--------------+

定位元字符:

文本的开始

文本的结尾

[[:<:]  词的开始

[[:>:]]  词的结尾

SELECT prod_name FROM products WHEREprod_name REGEXP '^[0-9\\.]' ORDER BY prod_name;

+--------------+

| prod_name   |

+--------------+

| .5 ton anvil |

| 1 ton anvil |

| 2 ton anvil |

+--------------+

SELECT prod_name FROM products WHEREprod_name REGEXP '[0-9\\.]' ORDER BY prod_name;

+----------------+

| prod_name      |

+----------------+

| .5 ton anvil   |

| 1 ton anvil    |

| 2 ton anvil    |

| JetPack 1000   |

| JetPack 2000   |

| TNT (1 stick)  |

| TNT (5 sticks) |

+----------------+

注意上面两条SQL语句查询结果的差异,上一条使用的开始定位符^,意思是查询出.或者任何以数字为串中第一个字符时才匹配他们。下面这一条语句没有要求匹配数字的位置。

SELECT 'hello'REGEXP '[0-9]';

上面的执行结果为0,表示字符串hello中没有数字。

拼接字段

SELECT CONCAT(vend_name, ' (', vend_country,')') FROM vendors ORDER BY vend_name;

+-------------------------------------------+

| CONCAT(vend_name, '(', vend_country, ')') |

+-------------------------------------------+

| ACME(USA)                                 |

| Anvils R Us(USA)                          |

| Furball Inc.(USA)                         |

| Jet Set(England)                          |

| Jouets Et Ours(France)                    |

| LT Supplies(USA)                          |

+-------------------------------------------+

在MySQL的SELECT语句中,可以使用Concat( )函数来拼接两个列。

使用别名

SELECT CONCAT(RTRIM(vend_name), ' (',RTRIM(vend_country), ')') AS vend_title FROM vendors ORDER BY vend_name;

+-------------------------+

| vend_title              |

+-------------------------+

| ACME (USA)              |

| Anvils R Us (USA)       |

| Furball Inc. (USA)      |

| Jet Set (England)       |

| Jouets Et Ours (France) |

| LT Supplies (USA)       |

+-------------------------+

别名是一个字段或值的替换名。别名用AS关键字赋予。也称导出列。

执行算术计算

SELECT prod_id, quantity, item_price FROMorderitems WHERE order_num = 20005;

+---------+----------+------------+

| prod_id | quantity | item_price |

+---------+----------+------------+

| ANV01  |       10 |       5.99 |

| ANV02  |        3 |       9.99 |

| TNT2   |        5 |      10.00 |

| FB     |        1 |      10.00 |

+---------+----------+------------+

SELECT prod_id, quantity, item_price,quantity*item_price AS expanded_price FROM orderitems WHERE order_num = 20005;

+---------+----------+------------+----------------+

| prod_id | quantity | item_price |expanded_price |

+---------+----------+------------+----------------+

| ANV01  |       10 |       5.99 |          59.90 |

| ANV02  |        3 |       9.99 |          29.97 |

| TNT2   |        5 |      10.00 |          50.00 |

| FB     |        1 |      10.00 |          10.00 |

+---------+----------+------------+----------------+

更新表中的数据

update 语句可用来修改表中的数据, 基本的使用形式为:

update 表名称 set 列名称=新值 where 更新条件;

使用示例:

将id为5的手机号改为默认的"-": update students settel=default where id=5;

将所有人的年龄增加1: update students set age=age+1;

将手机号为13288097888 的姓名改为 "张伟鹏",年龄改为 19: update students set name="张伟鹏", age=19 where tel="13288097888";

删除表中的数据

delete 语句用于删除表中的数据, 基本用法为:

delete from 表名称 where 删除条件;

使用示例:

删除id为2的行: delete from students where id=2;

删除所有年龄小于21岁的数据: delete from students where age<20;

删除表中的所有数据: delete from students;

创建后表的修改

alter table 语句用于创建后对表的修改, 基础用法如下:

添加列

基本形式: alter table 表名 add 列名 列数据类型 [after 插入位置];

示例:

在表的最后追加列address: alter table students add address char(60);

在名为 age 的列后插入列 birthday: alter table students add birthday date after age;

修改列

基本形式: alter table 表名 change 列名称 列新名称 新数据类型;

示例:

将表 tel 列改名为 telphone: alter table students change tel telphone char(13) default"-";

将 name 列的数据类型改为 char(16): alter table students change name name char(16) not null;

删除列

基本形式: alter table 表名 drop 列名称;

示例:

删除birthday 列: alter table students drop birthday;

重命名表

基本形式: alter table 表名 rename 新表名;

示例:

重命名students 表为 workmates: alter table students renameworkmates;

删除整张表

基本形式: drop table 表名;

示例: 删除workmates 表: drop table workmates;

删除整个数据库

基本形式: drop database 数据库名;

示例: 删除samp_db 数据库: drop database samp_db;


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值