1.连接数据库
连接mysql,需要以下信息:
主机名(计算机名)-如果连接到本地mysql服务器,为localhost;
端口(如果使用默认端口外的端口)
用户名
密码
2.选择数据库
USEdatabasename
3.查看数据库列表
SHOWDATABASES
4.查看数据库内可用的表的列表
SHOWTABLES
5.检索数据SELECT
5.1检索单个列
SELECTprod_nameFROMproducts;
5.2检索多个列
SELECTprod_id,prod_name,prod_priceFROMproducts;
5.3检索所有列
SELECT*FROMproducts;
5.4DISTINCT关键字检索不同的行
SELECTDISTINCTvend_idFROMproducts;
5.5LIMIT关键字限制结果检索,返回不多于5行
SELECTprod_nameFROMproductsLIMIT5;
5.6ORDERBY排序检索数据
SELECTprod_nameFROMproductsORDERBYprod_name;
5.7DESC关键字指定方向排序,降序排列
SELECTprod_id,prod_price,prod_nameFROMproductsORDERBYprod_priceDESC;
6.过滤数据
6.1等值检查
SELECTprod_name,prod_priceFROMproductsWHEREprod_price=2.5;
6.2不匹配检查
SELECTvend_id,prod_nameFROMproductsWHEREvend_id!=;
6.3BETWEEN范围值检查
SELECTprod_name,prod_priceFROMproductsWHEREprod_priceBETWEEN5AND10;
6.4ISNULL空值检查
SELECTcust_idFROMcustomersWHEREcust_emailISNULL;
6.5AND操作符
SELECTprod_id,prod_price,prod_nameFROMproductsWHEREvend_id=ANDprod_price=10;
6.6OR操作符
SELECTprod_name,prod_priceFROMproductsWHEREvend_id=ORvend_id=;
6.7IN操作符
SELECTprod_name,prod_priceFROMproductsWHEREvend_idIN(,)ORDERBYprod_name;
6.8NOT操作符
SELECTprod_name,prod_priceFROMproductsWHEREvend_idNOTIN(,)ORDERBYprod_name;
7.LIKE操作符-用通配符进行过滤
7.1百分号(%)通配符
%表示任何字符出现任意次数
SELECTprod_id,prod_nameFROMproductsWHEREprod_nameLIKE‘jet%’;
检索任意以jet起头的词
SELECTprod_id,prod_nameFROMproductsWHEREprod_nameLIKE‘%anvil%’;
检索任何位置包含文本anvil的值
SELECTprod_nameFROMproductsWHEREprod_nameLIKE‘s%e’;
检索以s起头以e结尾的所有产品
7.2下划线(_),只匹配单个字符
SELECTprod_id,prod_nameFROMproductsWHEREprod_nameLIKE‘_tonanvil’;
8.使用正则表达式匹配
8.1基本字符匹配
SELECTprod_nameFROMproductsWHEREprod_nameREGEXP‘’
8.2.匹配任意一个字符
SELECTprod_nameFROMproductsWHEREprod_nameRECEXP‘.’ORDERBYprod_name;
8.3
为正则表达式的or操作符,它表示匹配其中之一
SELECTprod_nameFROMproductsWHEREprod_nameREGEXP‘
2’ORDERBYprod_name;
8.4匹配几个字符之一
SELECTprod_nameFROMproductsWHEREprod_nameREGEXP‘[]ton’ORDERBYprod_name;
[]定义一组字符,它的意思是匹配1或2或3
8.5匹配范围
SELECTprod_nameFROMproductsWHEREprod_nameREGEXP‘[1-5]ton’ORDERBYprod_name;
9.聚集函数
AVG()返回某列的平均值
COUNT()返回某列的行数
MAX()返回某列的最大值
MIN()返回某列的最小值
SUM()返回某列值之和
9.1AVG()函数
返回products表中所有产品的平均价格
SELECTAVG(prod_price)ASavg_priceFROMproducts;
9.2COUNT()函数
返回customers表中客户的总数
SELECTCOUMT(*)ASnum_custFROMcustomers;
返回具有电子邮件地址的客户计数
SELECTCOUNT(cust_email)ASnum_custFROMcustomers;
9.3MAX()函数
返回products表中最贵物品的价格
SELECTMAX(prod_price)ASmax_priceFROMproducts;
9.4MIN()函数
返回products表中最便宜物品的价格
SELECTMIN(prod_price)ASmin_priceFROMproducts;
9.5SUM()函数
某个订单中所有物品数量之和
SELECTSUM(quantity)ASitems_orderedFROMorderitemsWHEREorder_num=25;
10.使用子查询进行过滤
SELECTcust_id
FROMorders
WHEREorder_numIN(SELECTorder_num
FROMorderitems
WHEREprod_id=‘TNT2’);
11.联结表查询
·JOIN:如果表中有至少一个匹配,则返回行
·LEFTJOIN:即使右表中没有匹配,也从左表返回所有的行
·RIGHTJOIN:即使左表中没有匹配,也从右表返回所有的行
·FULLJOIN:只要其中一个表中存在匹配,就返回行
员工信息表EmployeeTB
employeeid
employeename
deptid
1
张三
01
2
李四
01
3
王五
02
4
赵六
02
5
郑七
NULL
部门信息表DeptTB
deptid
deptname
01
技术部
02
市场部
03
工程部
现在进行连接查询,连接两张表检索数据。分别检索员工信息表的员工编号、员工姓名和部门信息表中的部门名称。
11.1内连接查询
我们可以有两种方式,这两种是等效的一种是:SELECTe.employeeid,e.employeename,d.deptnameFROMEmployeeTBASe,DeptTBASdWHEREe.deptid=d.deptid另外一个是:SELECTe.employeeid,e.employeename,d.deptnameFROMEmployeeTBASeINNERJOINDeptTBASdONe.deptid=d.deptid检索的结果都是:
employeeid
employeename
deptname
1
张三
技术部
2
李四
技术部
3
王五
市场部
4
赵六
市场部
而“郑七”和“工程部”的信息是不会检索出来。因为采用内连接计算的时候必须要保证连接的条件e.deptid=d.deptid匹配,结果才会被检索出来。当我们连接两张检索数据的时候,检索的方式是首先逐行扫描“员工信息表”中的记录,然后根据连接条件来决定此记录是否被检索。比如对于张三,这条记录的deptid是01(部门编号),它在部门表中能找到和它匹配的编号01,而编号01的部门名称(deptname)是“技术部”所以张三这条记录会被检索,最终的结果肯定是:1张三技术部同样,李四、王五、赵六也能。但是郑七的部门编号是NULL,它在部门信息表中找不到匹配的项(因为部门信息表中不存在部门编号为NULL的部门),所以郑七不会被检索。同理,没有任何人员的部门编号为03,所以工程部的记录也不会被检索
11.2左外联结
但是有些情况下,我们需要知道所有员工的信息,即使他不属于任何部门。这样我们就可以采用外连接,在这里为左外连接,也就是连接中的左表的表中的记录,无论能不能在右表中找到匹配的项,都要检索,如果没有匹配的项目,那么右表中的字段值为NULL(空),在这里就代表,此员工不属于任何部门。检索语句为:SELECTe.employeeid,e.employeename,d.deptnameFROMEmployeeTBASeLEFTOUTERJOINDeptTBASdONe.deptid=d.deptid检索的结果都是:
employeeid
employeename
deptname
1
张三
技术部
2
李四
技术部
3
王五
市场部
4
赵六
市场部
5
郑七
NULL
但是在这里,工程部同样不会被检索,因为,deptname是在连接的右边的表中,“工程部”在左表中不存在任何的记录,所以不会被检索。这里的是“连接中的左边的表”
11.3右外联结
有时,我们需要知道,全部部门的信息,即使它没有任何的员工。在我们的查询中部门表在连接的右边,如果我们想知道右边表中的所有记录信息,那么就可以采用右外连接,如果此记录在左边的表中找不到匹配项,则相应字段(employeeid,employeename)为NULL检索语句为:SELECTe.employeeid,e.employeename,d.deptnameFROMEmployeeTBASeRIGHTOUTERJOINDeptTBASdONe.deptid=d.deptid检索的结果都是:
employeeid
employeename
deptname
1
张三
技术部
2
李四
技术部
3
王五
市场部
4
赵六
市场部
NULL
NULL
工程部
但在这里,郑七是不会被检索了,因为它在右表中找不到匹配项,这里的是“连接中的右边的表”
11.4完全外联结
如果我们想知道所有的记录呢?无论员工有没有部门,部门有没有员工,我们都需要检索。这里就可以使用完全外连接。连接中的两部分。如果没有部门,部门为空,没有员工,员工信息为空。检索语句为:SELECTe.employeeid,e.employeename,d.deptnameFROMEmployeeTBASeFULLOUTERJOINDeptTBASdONe.deptid=d.deptid检索的结果都是:
employeeid
employeename
deptname
1
张三
技术部
2
李四
技术部
3
王五
市场部
4
赵六
市场部
5
郑七
NULL
NULL
NULL
工程部
12.INSERT插入数据
INSERT是用来插入或添加行到数据库表的,插入可以用几种方式使用
插入完整的行
插入行的一部分
插入多行
插入某些查询的结果
语法
INSERTINTO表名称VALUES(值1,值2,....)
INSERTINTOtable_name(列1,列2,...)VALUES(值1,值2,....)
INSERTINTOcustomers
VALUES(NULL,
‘PepE.LaPew’,
‘MainStreet’,
‘’);
INSERTINTOcustomers(cust_name,
Cust_address,
Cust_city)
VALUES(‘PepE.LaPew’,
‘MainStreet’,
‘beijing’);
13.UPDATE更新数据
UPDATE为更新修改表中的数据,可采用两种方式使用UPDATE:
更新表中特定行;
更新表中所有行。
语法
UPDATE表名称SET列名称=新值WHERE列名称=某值
UPDATEcustomersSETcust_email=‘elmer
fudd.北京中科白殿疯怎么样中科UM-D