mysql学习 第2天 mysql 基础语句

DDL语句数据定义语言,这些语句定义了不同的数据段、
数据库、表、列、索引等数据库对象的定义

基础语句:          --  代表数据库或者表的名称

show databases;

create databases;    create tables;   use database  --  ;   

查询表:desc  -- 

详细查询   show create table -- \G;

删除表或数据库:drop table --

                drop database  --

修改表:ALTER TABLE   tablename   MODIFY      [COLUMN]       column_definition [FIRST | AFTER col_name]

               例:alter table   [tablename]  modify   [colunmname]  varchar(20)

增加表字段:ALTER  TABLE  tablename  ADD   [COLUMN] column_definition [FIRST | AFTER col_name]

                       alter table   [emp]   add column  [age]  [int(3)];

删除表字段:ALTER TABLE tablename  DROP  [COLUMN]   col_name

                       


字段改名:ALTER TABLE tablename   CHANGE     old_col_name   column_definition [FIRST|AFTER col_name]

注意:change 和 modify 都可以修改表的定义,不同的是 change 后面需要写两次列名,不方便。
但是 change 的优点是可以修改列名称,modify 则不能                                     可选项 first|after
column_name,这个选项可以用来修改字段在表中的位置

注意:CHANGE/FIRST|AFTER COLUMN 这些关键字都属于 MySQL 在标准 SQL 上的扩展,在
其他数据库上不一定适用。


表改名,语法如下:
ALTER TABLE tablename RENAME [TO] new_tablename


DML语句

1    插入记录的基本语法如下:
INSERT INTO tablename (field1,field2,......fieldn) VALUES(value1,value2,......valuesn);

向表 emp 中插入以下记录: ename 为 zzx1, hiredate 为 2000-01-01, sal 为 2000, deptno
为 1,命令执行如下:
mysql> insert into emp (ename,hiredate,sal,deptno) values('zzx1','2000-01-01','2000',1);

在 MySQL 中,insert 语句还有一个很好的特性,可以一次性插入多条记录,语法如下:
INSERT INTO tablename (field1, field2,......fieldn)
VALUES
(record1_value1, record1_value2,......record1_valuesn),
(record2_value1, record2_value2,......record2_valuesn),
......
(recordn_value1, recordn_value2,......recordn_valuesn)
;
可以看出,每条记录之间都用逗号进行了分隔。


2更新记录

对于表里的记录值,可以通过 update 命令进行更改,语法如下:
UPDATE tablename  SET  field1=value1,field2.=value2,......fieldn=valuen [WHERE CONDITION]

例如,将表 emp 中 ename 为“lisa”的薪水(sal)从 3000 更改为 4000:
mysql> update emp set sal=4000 where ename='lisa';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

在 MySQL 中,update 命令可以同时更新多个表中数据,语法如下:
UPDATE t1,t2...tn set t1.field1=expr1,tn.fieldn=exprn [WHERE CONDITION]

mysql>update emp  a,dept   b  set   a.sal=a.sal*b.deptno,b.deptname=a.ename    where   a.deptno=b.deptno;


3 删除记录

如果记录不再需要,可以用 delete 命令进行删除,语法如下:
DELETE FROM tablename [WHERE CONDITION]


4查寻记录

SELECT *  FROM  tablename  [WHERE CONDITION]

(1)查询不重复的记录。
有时需要将表中的记录去掉重复后显示出来,可以用 distinct 关键字来实现:

mysql> select ename,hiredate,sal,deptno from emp;
+--------+------------+---------+--------+
| ename | hiredate
| sal
| deptno |
+--------+------------+---------+--------+
| zzx | 2000-01-01 | 2000.00 | 1 |
| lisa | 2003-02-01 | 4000.00 | 2 |
| bjguan | 2004-04-02 | 5000.00 | 1 |
+--------+------------+---------+--------+

mysql> select distinct deptno from emp;
+--------+
| deptno |
+--------+
| 1 |
| 2 |
+--------+


(2)条件查询           在很多情况下,用户并不需要查询所有的记录,而只是需要根据限定条件来查询一部分数据,
用 where 关键字可以来实现这样的操作。

(3)排序和限制 

用ordered by 关键字                SELECT * FROM tablename [WHERE CONDITION] [ORDER BY field1 [DESC|ASC] , field2
[DESC|ASC],......fieldn [DESC|ASC]]

DESC代表降序   ASC代表升序  默认为升序

使用LIMIT关键字来显示一部分,而不是全部。

语法:SELECT ......[LIMIT offset_start,row_count]
其中 offset_start 表示记录的起始偏移量,row_count 表示显示的行数。在默认情况下,起始偏移量为 0,                                                 只需要写记录行数就可以,这时候,显示的实际就是前 n条记录。

例如,显示 emp 表中按照 sal 排序后的前 3 条记录:
mysql> select * from emp order by sal limit 3;
+--------+------------+---------+--------+
| ename | hiredate
| sal
| deptno |
+--------+------------+---------+--------+
| zzx | 2000-01-01 | 2000.00 | 1 |
| lisa | 2003-02-01 | 4000.00 | 2 |
| bzshen | 2005-04-01 | 4000.00 | 3 |
+--------+------------+---------+--------+

如果要显示 emp 表中按照 sal 排序后从第二条记录开始,显示 3 条记录:
mysql> select * from emp order by sal limit 1,3;
+--------+------------+---------+--------+
| ename | hiredate
| sal
| deptno |
+--------+------------+---------+--------+
| lisa
| 2003-02-01 | 4000.00 | 2 |
| bzshen | 2005-04-01 | 4000.00 | 3 |
| bjguan | 2004-04-02 | 5000.00 | 1 |
+--------+------------+---------+--------+

注意:limit 属于 MySQL 扩展 SQL92 后的语法,在其他数据库上并不能通用。


4聚合

聚合操作的语法如下:
SELECT [field1,field2,......fieldn] fun_name
FROM tablename
[WHERE where_contition]
[GROUP BY field1,field2,......fieldn
[WITH ROLLUP]]
[HAVING where_contition]

 fun_name 表示要做的聚合操作,也就是聚合函数,常用的有 sum(求和)、count(*)(记
录数)、max(最大值)、min(最小值)。
 GROUP BY 关键字表示要进行分类聚合的字段,比如要按照部门分类统计员工数量,部门
就应该写在 group by 后面。
 WITH ROLLUP 是可选语法,表明是否对分类聚合后的结果进行再汇总。
 HAVING 关键字表示对分类后的结果再进行条件的过滤。

注意:having 和 where 的区别在于 having 是对聚合后的结果进行条件的过滤,而 where 是在聚
合前就对记录进行过滤,如果逻辑允许,我们尽可能用 where 先过滤记录,这样因为结果
集减小,将对聚合的效率大大提高,最后再根据逻辑看是否用 having 进行再过滤。

(5)表连接。
当需要同时显示多个表中的字段时,就可以用表连接来实现这样的功能。































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值