SQL语句学习

  • 创建表

CREATE TABLE Student1
(
Id INT NOT NULL UNIQUE PRIMARY KEY,
Name VARCHAR(20) NOT NULL,
Age INT NULL,
Gender VARCHAR(4) NULL
);

char(10)和VARCHAR(10)主要的区别是什么?

(1)、首先明确的是,char的长度是不可变的,而varchar的长度是可变的,

(2)、定义一个char[10]和varchar[10],如果存进去的是‘abcd’,那么char所占的长度依然为10,除了字符‘abcd’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的,

(3)、char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。

(4)、char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。

  • 删除表DELETE(删除表中的部分或全部数据)

DELETE FROM Student WHERE Id<10;

  • 清空表TRUNCATE(删除表中的所有数据,操作不可回滚)

TRUNCATE TABLE Student;//access不支持这个语法

  • 删除表DROP(删除表)

DROP TABLE Student1

  • 修改表

-- 添加学生表`Phone`列
ALTER TABLE Student ADD Phone VARCHAR(15) NULL;
-- 删除学生表`Phone`列
ALTER TABLE Student DROP COLUMN Phone;
-- 修改学生表`Phone`列
ALTER TABLE Student MODIFY Phone VARCHAR(13) NULL;//access语法错误

  • 查询

SQL查询语句的顺序:SELECT、FROM、WHERE、GROUP BY、
HAVING、ORDER BY。SELECT、FROM是必须的,HAVING子句只能与
GROUP BY搭配使用。
示例
SELECT * FROM Student
WHERE Id>10
GROUP BY Age HAVING AVG(Age) > 20
ORDER BY Id DESC

  • 插入

-- 插入不存在的数据
INSERT INTO Student (Name,Age,Gender) VALUES ('Andy',30,'女');
-- 将查询的数据插入到数据表中
INSERT INTO Student (Name,Age,Gender)
SELECT Name,Age,Gender FROM Student_T WHERE Id >10;

  • 更新

示例
-- 将Id在(10,100)的Age加1
UPDATE Student SET Age= Age+1 WHERE Id>10 AND Id<100

  • 索引

创建索引
语法
CREATE [UNIQUE] [CLUSTER] INDEX <索引名> ON <表名>(<列名>[<次序>][,
<列名>[<次序>]]…);
UNIQUE:表明此索引的每一个索引值只对应唯一的数据记录 CLUSTER:表
明建立的索引是聚集索引 次序:可选ASC(升序)或DESC(降序),默认ASC
示例
-- 建立学生表索引:单一字段Id索引倒序
CREATE UNIQUE INDEX INDEX_SId ON Student (Id DESC);
-- 建立学生表索引:多个字段Id、Name索引倒序
CREATE UNIQUE INDEX INDEX_SId_SName ON Student (Id DESC,Name DESC);
删除索引
语法
DROP INDEX <索引名>;
示例
-- 删除学生表索引 INDEX_SId
DROP INDEX INDEX_SId;
 

  • 在关系型数据库连接查询中有以下几种查询方式:1,内连接;2,左连接;3,右连接;4,全连接。下面说明各种连接查询方式的使用及区别。(原文:https://www.iteye.com/blog/pandan-xyz-2273567

有两张表如下所示:

 

      1.内连接

          利用内连接可获取两表的公共部分的记录,即图中的数据集C, 语句如下:Select * from A JOIN B ON A.Aid=B.Bnameid 运行结果如下图4所示:其实select * from A,B where A.Aid=B.Bnameid与Select * from A inner(可省略) JOIN B ON A.Aid=B.Bnameid的运行结果是一样的。 

      2.左连接

        数据表A中的记录为主循环体,依次匹配数据表B中的记录,如果数据表A中连接字段Aid的值,在数据表B中没有Bnameid值与之对应,则侧以null代替。结果集:公共部分记录集C+表A记录集A1。语句如下:select * from A Left JOIN B ON A.Aid=B.Bnameid

      3.右连接

         数据表B中的记录为主循环体,依次匹配数据表A中的记录,如果数据表B中连接字段Bnameid的值,在数据表A中没有Aid值与之对应,则侧以null代替。结果集:公共部分记录集C+表B记录集B1。语句如下:select * from A Right JOIN B ON A.Aid=B.Bnameid

      4.全连接(Full JOIN)

         结果集:公共部分记录集C+表A记录集A1+表B记录集B1。语句如下:select * from A FULL JOIN  B  ON A.Aid=B.Bnameid。

 

 


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值