所在的位置: 数据库 >> 基本简介 >> 数据库基础学习

数据库基础学习

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



转载请注明:http://www.xcqg58.com/jbjj/8117.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了