目录
1. SELECT * FROM TABLE (产生对象vector )
-
重点: Select 是用来形成新对象 vs 不是直接产生成新表格
(如果产生新表格是需要使用 Seletct * Into newTable From TableName) -
Select 产生新对象 .默认是利用表的所有列明 产生新对象
-
表格是表格 vs Select 是产生对象vector
表格 NameList
id | Name | Age | Class |
---|---|---|---|
1 | Lee | 18 | Class.1 |
2 | change | 19 | Class.1 |
3 | Mary | 17 | Class.2 |
Select * From NameList 的效果
struct Student
{
int id ;
string Name;
int Age;
string Class;
}
std::vector<Student > result;
- 挑选新"对象"的变量
Select id , Name From NameList; // 这里id ,name 没有括号 是因为,没有表明在前
struct Student
{
int id ;
string Name;
}
std::vector<Student > result;
2.Where and / or ( 过滤 选中结果过滤)
重点: Where 是从Select 产生的 std::vector result; 再过滤
(on 是在join内部进行过滤)
- Select * From tab Where Name= ‘lee’ and age = 18
注意where 是使用Select 的result 再进行过滤. 所以必须有变量名
3. Order By 排序
重点 Order By 只是对产生的result 进行个排序
(相当于使用std::sort())
- ORDER BY column_name,column_name ASC|DESC;
先Select产生对象 => Where 过滤 => 为了显示一下order by一下
- Order By 其实存在意义不大, 事不过是为了显示一下.
4. Insert Into 插入到"表" (不是插入到对象vector)
重点: 是插入到表中
Insert Into TableName (colName1,colName2) Values (v1,v2)
(一旦值前面需要表名了 那么列就要放到括号里面了)
Insert Into NameList(id,Name,age,Class) Vaules(4,“Lisa”, 25,“Class.1”);
5. Updata 更新"表" (不是更新到对象vector)
Update NameList Set age=12, Class= ‘Class.3’ Where id = 4; // 把 id=4 lisa的年龄改为12
(Update 如果没有where 那么,将会把整个表都设置了)
6. Delete (不是删除对象vector)
Delete From Table Where col = XXX
(如果没有where 会把所有内容都删除)
7 join 先拼凑临时表 ,再产生对象
重点 Join 新编个新"表" - (临时新表)
From LTable Inner Join RTable (一直说 From选中表) [Inner Join 产生一个新的临时表]
Inner Join == Join
Left Join
Right Join
7.0 表格
NameList - 姓名列表
id | Name | Age | Class |
---|---|---|---|
1 | Lee | 18 | Class.1 |
2 | change | 19 | Class.1 |
3 | Mary | 17 | Class.2 |
ScoreList - 成绩列表
order | Name | Score |
---|---|---|
1 | Mary | 100 |
2 | change | 88 |
3 | Lee | 86 |
4 | Tom | 85 |
4 | Jim | 84 |
7.1 Inner Join
SELECT * FROM NameList INNER JOIN ScoreList ON NameList.Name=ScoreList.Name
解释
- SELECT 是为了最后产生vecotor
- FROM 是表明要从一个表中 (临时表也行)
- NameList INNER JOIN ScoreList 是两个表相连 Innert 相连
Inner Join 表示 把On 那列先列出来, 然后其他表格向这个表格对数据
操作方法 : 把相等的列 放到"中间" 左右表 分列两侧
左表 ----------Name--------------右表
order | Age | Class | <—Name—> | order | Score |
---|---|---|---|---|---|
3 | 18 | Class.1 | Lee | 86 | 3 |
2 | 19 | Class.1 | change | 88 | 2 |
1 | 17 | Class.2 | Mary | 100 | 1 |
7.2 Left Join (类数据扩展)
NameList - 姓名列表
id | Name | Age | Class |
---|---|---|---|
1 | Lee | 18 | Class.1 |
2 | change | 19 | Class.1 |
3 | Mary | 17 | Class.2 |
类扩展家庭住址
HomeInfo - 家庭信息
id | address | Nation |
---|---|---|
1 | No A Street | Franch |
2 | Street C | England |
用唯一ID 来拼新表.
主要原因,原来的类已经有id,且是唯一,现在就需要新表补充新的信息.
SELECT * FROM NameList LEFT JOIN HomeInfo ON NameList .id = HomeInfo.id;
id ----> | Name | Age | Class | address | Nation |
---|---|---|---|---|---|
1 | Lee | 18 | Class.1 | No A Street | Franch |
2 | change | 19 | Class.1 | Street C | England |
3 | Mary | 17 | Class.2 | NULL | NULL |
8 约束
1. ID 的 NOT NULL PRIMARY KEY
P_Id int NOT NULL PRIMARY KEY
PRIMARY KEY 默认带有属性 UNIQUE KEY
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
)
2. FOREIGN KEY
一个表中的 FOREIGN KEY 指向另一个表中的 UNIQUE KEY(唯一约束的键)。
HomeInfo - 家庭信息
Home_id | address | Nation | id |
---|---|---|---|
1 | No A Street | Franch | 1 |
2 | Street C | England | 2 |
也就是home_id 可以独立管理,而且 id 还必须来自NameList 更加方便管理
CREATE TABLE HomeInfo
(
Home_id int NOT NULL PRIMARY KEY,
address varchar(255) NOT NULL,
Nation varchar(255) NOT NULL,
id int FOREIGN KEY REFERENCES NameList (id)
)
2.1 类数据扩展记录表
重点:
- 扩展表需要自己的hode_id – 自动维护方便使用
- 扩展表使用id –
3. AUTO_INCREMENT
AUTO_INCREMENT primary key
9.CREATE VIEW
重点:用来延时处理:
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
10 部分 Select 产生vector
SELECT TOP 前50个
SELECT LIMIT 限制
SELECT ROWNUM 行数