今日Azhuは正式に学習する第4のステップ入力された私たちを導く
の選択に
マスター()へのエントリーからSQL Serverの
SQL Serverの(b)のマスタリング
SQL Serverの(b)は簡潔にマスタリング
導入からSQL Serverの熟練した(c)は
、ディレクトリの
クエリ処理とテーブルのデータが編集
、クエリデータ
1.簡単なクエリを
2.統計
3.クエリに参加
4.サブクエリ
5.共同問い合わせ
II、編集データ
1.データ
2. [変更データ
の削除をデータ
テーブルを編集するクエリ処理とデータ
まず、クエリデータ
1.単純な問合せ
文法
SELECT 目标表达式
FROM 表名
(1)クエリ指定欄
SELECT 姓名
FROM 项目表
(2)カラム検索
全出力のテーブルのために*すべての列で表さ、テーブル内のすべての列:注
SELECT *
FROM 项目表
(3)カラムクエリを計算する
特定の特性の計算結果が一覧表示された後にチェックアウトすることができます
SELECT 姓名,累计学分,累计学分-累计学分*0.1
FROM 学生表
エイリアス(4)カラム
キーワードAS 1
2 =コネクト
SELECT 姓名 AS name,累计学分 AS Ogpa,Ngpa=累计学分-累计学分*0.1
FROM 学生表
注:列の別名のスペースは、単一引用符を使用します
SELECT 姓名 AS '学生表 NAME'
FROM 学生表
(5)は、重複するタプルを排除するためにDISTINCTキーワードを使用します
SELECT DISTINCT 所在院系,专业
FROM 学生表
注:この削除重複
クエリの彼の全体のリストのDISTINCTキーワード範囲
2.クエリ条件を満足するタプル
WHEREクエリを
返すクエリTRUE(真)、FALSE(偽)、UNKNOWN(不明)
の3つのテーブルをNOT、AND、OR論理演算
しません | 結果 |
---|---|
T | F |
F | T |
ザ・ | ザ・ |
そして | T | F | ザ・ |
---|---|---|---|
T | T | F | ザ・ |
F | F | F | F |
ザ・ | ザ・ | F | ザ・ |
OR | T | F | ザ・ |
---|---|---|---|
T | T | T | T |
F | T | F | ザ・ |
ザ・ | T | ザ・ | ザ・ |
一般的なクエリ
質問 | オペレータ(0) | 条件(論理式)形式 | リマーク |
---|---|---|---|
大きさの比較 | =、>、<、> =、<=、!= ,,!>、!< | op1op 2 | バイナリ演算子 |
スコープを決定します | [NOT] BETWEEN AND | [NOT] OP2とOP 3 BETWEEN 0P1 | 三の操作 |
セットの決定 | [ありませんで | 1 [NOT] IN 2 | バイナリ演算子 |
文字列一致 | [好きじゃない | 1 [NOT] LIKE 2 | バイナリ演算子 |
ヌル | IS [NOT] NULL | IS [NOT] NULLに | 単項 |
多重条件 | NOT、AND、OR、() | OP1 UPと2 NO、opi1OR 2 | 単項、二項演算子の残りは、括弧は、動作の優先順位を変更するために使用されているNOT |
大きさの比較
杭州からのすべての学生のためのクエリを(1)
SELECT *
FROM 学生表
WHERE 籍贯='杭州'
(2)160以下のクエリ累積クレジットや累積クレジットでの学生の名前
SELECT 姓名,累计学分
FROM 学生表
WHERE 累计学分<160
範囲を決定
定義を
op1 [NOT] BETWEEN op2 AND op3
意味:条件が真であるか偽であればOP1とOP2 OP3の間に存在しない
クエリ150と159の間の累積信用学生の名前と蓄積されたクレジット
SELECT 学号,姓名
FROM 学生表
WHERE 累计学分 BETWEEN 150 AND 159
一連の決定
のINの構文
杭州、大同、太原の学生番号と名前からクエリ(ないし)
SELECT 学号,姓名
FROM 学生表
WHERE 籍贯 (NOT) IN (‘杭州’,‘大同’,‘太原’)
2問い合わせ学生の数は09になった後、に等しいまたは学生番号2は、最初の2つまたは学生番号と名前の間でした
SELECT 学号,姓名
FROM 学生表
WHERE SUMBSTRING (学号,6,2)IN (‘09’,SUMBSTRING(学号,2,2),SUMBSTRING(学号,4,2))
注:SUMBSTRING(S、P、C)のサブストリングcのp番目の文字列から始まる文字列sのリターンの意味
文字列のマッチング
LIKE構文
の特殊文字:
% | 任意の長さの一致文字列(長さが0であってもよいです) |
---|---|
_ | 任意の1文字に一致します |
[C1C2 ... CN] | 、C2 ... CN、一致文字C1インチ C1、C2は、... CNは、連続時間のように単純化すると、[C1-CN] |
[^ C1C2 ... .CN] | マッチングのC1、C2 ... CN、文字の外側に加えて。[^ C1-CN]のように簡略化C1、C2、... CN、連続時間 |
例の
2番目の単語でのクエリ名は「鵬」学生番号と名前です
SELECT 学号,姓名
FROM 学生表
WHERE 姓名LIKE ‘_鹏%’
学生IDクエリの長さは7に等しくない、または6は、学生番号と名前の学生数の後に数字以外の文字が含まれています
SELECT 学号,姓名
FROM 学生表
WHERE 学号NOT LINK'S[0-9][0-9][0-9][0-9][0-9][0-9]'
出会う学生IDは、最後のも1 9 3も学生番号と名前でもありません
SELECT 学号,姓名
FROM 学生表
WHERE 学号 LINK '%[^139]'
普通である_ノートの最初のコース情報「DB_」へのコースの名前を見つけるには、今ESCAPEを使用
select*
from 课程表
where课名 LINK'DB\_%' ESCAPE '\'
ESCAPEは、「エスケープ文字は「フレーズ」を表しので、パターン文字列その直後に」\「文字」の後ろに「意味のワイルドカードを持って、そして通常にエスケープしません」「文字
ヌルクエリ関わる
構文はNULLではありません
お問い合わせは学生ID番号と開始のスコアがあります。
SELECT 学号,开课号
FROM 选课表
WHERE 成绩 IS NOT NULL
注:=の代わりに使用されていない、いないではありません!=と<>の代わりに、
多基準クエリ
OR AND NOT OR AND NOT優先降順
このようなクエリの男の子を、トップ3は、彼またはNingbi杭州からの彼の電話番号「130」ではありませんどちらも、彼は商業を専攻し、また研究さ情報管理
SELECT*
FROM 学生表
WHERE 性别=‘男’AND SUBSTRING(移动电话,1,3)=‘130’AND(籍贯=‘杭州’ OR 籍贯=‘宁波’)AND NOT 专业 IN (‘电子商务’,‘信息管理’)
3.ソートクエリ結果
構文:OEDER BY
SELECT 学号
FROM 选课表
WHERE 开课号=‘000100’
ORDER BY 成绩 DESE,成绩+10
昇順で新しい結果によれば、元の結果に応じて降順に学生番号、スコア、スコアと新しいポスト10ポイントを獲得、クエリ結果の過程で選択的開始番号「000100」を問い合わせます
注:DESE降順、Moはまだ昇順です書いていません
2.統計
1.一般的に使用される統計関数
関数の形式 | 機能機能 |
---|---|
COUNT([DISTINCT] *) | タプルの数を数えます |
COUNT([DISTINCT] <列式>) | 値の数から統計 |
和 | 列の合計数値式を計算します |
AVG | 平均計算式の数値列 |
MAX | 列の最大の式を求めます |
MIN | 列式の最小化 |
すべてのお問い合わせの教科書合計価格と平均価格と合計金額とプレイQizhe後の平均価格
SELECT SUM(定价) AS 原总价,AVG(定价),SUM(定价*0.7)折扣总价,折扣均价=AVG(定价*0.7)
FROM (课程表)
条件を満足するタプルの数をカウントするために使用COUNT(*)は、
コース番号はコースの総数最初の2桁「02」である問い合わせます
SELECT COUNT (*)
FROM 课程表
WHERE 课号 LINK 'C02%'
2.グループの問い合わせ
(1)グループにGROUP BY句
SELECT 开课号,COUNT (学号)
FROM 选课表
GROUP BY 开课号
具有相同开课号的元组被分为一组
(2)HAVING短语来帅选
3.连接查询
在列名前+<.表名>作为限定
查询学生表的基本信息及选课信息
SELECT 学生表.*,开课号,成绩
FROM 学生表 AS A,选课表AS B
WHERE 学生表.学号=选课表.学号
使用JOIN ON 关键字
JOIN 用于连接两张表,ON给出两张表的连接条件
查询至少选修了学号为‘S060110’的学生所选一门课程的学生学号和姓名
SELECT DISTINCT Z.学号, 姓名
FROM 选课表 X JOIN 选课表 Y ON Y.学号!=X.学号 AND Y.开课号=x.开课号
JOIN 学生表Z ON Y.学号=Z.学号
WHEREx.学号='S060110'
外连接
左外连接:将左边关系中未用到的列加到结果集把=改为"*=”,或者JOIN 改为LEFT OUTER JOIN
右外连接:将右边关系中未用到的列加到结果集把=改为"=*”,或者JOIN 改为RIGHT OUTER JOIN
全外连接:将左右关系全部连接,将JOIN改为FULL OUTER JOIN
查询学生的学号、姓名、籍贯信息及选课信息
(1)左外连接
SELECT学生表.学号, 姓名,籍贯,开课号,成绩
FROM学生表, 选课表
WHERE 学生表.学号*=选课表.学号
(2)右外连接
SELECT学生表.学号, 姓名, 籍贯, 开课号, 成绩
FROM 学生表 RIGHT OUTER JOIN 选课表 ON 学生表.学号=选课表.学号
(3)全外连接
SELECT 学生表.学号, 姓名, 籍贯, 开课号, 成绩
FROM 学生表 FULL OUTER JOIN 选课表 ON 学生表.学号=选课表.学号
4.子查询
嵌套SELECT语句叫子查询,一个 SELECT 语句的查询结果能够作为另一个语句的输入值。
子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一个临时表使用,也能够出现在select list中,作为一个字段值来返回。
1、单行子查询 :单行子查询是指子查询的返回结果只有一行数据。当主查询语句的条件语句中引用子查询结果时可用单行比较符号(=, >, <, >=, <=, <>)来进行比较。
例:
select ename,deptno,sal
from emp
where deptno=(select deptno from dept where loc='NEW YORK');
2、多行子查询:多行子查询即是子查询的返回结果是多行数据。当主查询语句的条件语句中引用子查询结果时必须用多行比较符号(IN,ALL,ANY)来进行比较。
IN的含义是匹配子查询结果中的任一个值即可(“IN” 操作符,能够测试某个值是否在一个列表中),ALL则必须要符合子查询的所有值才可,ANY要符合子查询结果的任何一个值即可
注意ALL 和ANY 操作符不能单独使用,而只能与单行比较符(=、>、< 、>= 、<= 、<>)结合使用。
例:1、单行子查询
select ename,deptno,sal
from emp
where deptno=(select deptno
from dept
where loc='NEW YORK');
2、多行子查询
SELECT ename,job,sal
FROM EMP
WHERE deptno in ( SELECT deptno
FROM dept
WHERE dname LIKE 'A%');
3、多列子查询
SELECT deptno,ename,job,sal
FROM EMP
WHERE (deptno,sal) IN (SELECT deptno,MAX(sal) FROM EMP GROUP BY deptno);
5.联合查询
UNION将多个查询结果合并起来,个结果表的列数相同
查询计算机专业和信息管理专业的学生信息。
SELECT*
FROM 学生表
WHERE 专业='计算机'
UNION
SELECT
FROM 学生表
WHERE 专业='信息管理'
二、表数据编辑
插入数据
1.插入单个元组
2.插入子查询结果
3.使用SELECT …INTO语句进行数据插入
修改数据
语法
UPDATE <表名>
SET<列名>=<表达式>[,....n]
UPDATE语句用来修改指定表中满足WHERE条件的元组,用SET子句中的值取代响应的值
修改表中所有行
将学生的累计学分增加3分
UPDATE 学生表
SET 累计学分=累计学分+3
修改某些行
将计算机专业所有女上的籍贯改为“杭州”,累计学分+3
UPDATE 学生表
SET 累计学分=累计学分+3,籍贯='杭州'
WHERE 专业='计算机'AND 性别=‘女;’
删除数据
语法
DELETE [FROM] <目标表名>
[FROM <表名>[,...n]]
[WHERE <条件>]
DELETE用来删除满足WHERE条件的元组
从学生表中删除计算机专业所有女生信息
DELETE FROM 学生表
WHERE 专业=‘计算机’AND性别=‘女’
将学生表清空
DELECT FROM 学生表
TRUNCATE TABLE <目标表名>
比较快不记录日志的操作,删除的数据无法恢复