Click here to load reader

第 3 章 SQL 语言

  • Upload
    art

  • View
    375

  • Download
    0

Embed Size (px)

DESCRIPTION

第 3 章 SQL 语言. 本章概要. SQL 是结构化查询语言( Structured Query Language )的缩写,其功能包括数据查询、数据操纵、数据定义和数据控制四个部分。 SQL 语言简洁、方便实用、功能齐全,已成为目前应用最广的关系数据库语言。 本章要求 了解 SQL 语言的特点, 掌握 SQL 语言的四大功能及使用方法, 重点掌握其数据查询功能及其使用。. 3.1 SQL 语言的基本概念与特点. 3.1.1 SQL 语言的发展及标准化 3.1.1.1 SQL 语言发展史 - PowerPoint PPT Presentation

Citation preview

  • 3 SQL

  • SQLStructured Query LanguageSQL SQLSQL

  • 3.1 SQL 3.1.1 SQL3.1.1.1 SQL SQL1974CHAMBERLINBOYEESEQUEL(STUCTURED ENGLISH QUERY LANGUAGE)IBMSYSTEM R1981 IBMSQL/DSSQLSQL SYBASEINFORMIX ORACLEDB2INGRESFOXPROACCESS

  • 3.1.1.2 SQL SQLSQLSQL1. 1982AMERICAN NATIONAL STANDARD INSTITUTEANSISQL2. 1986SQLSQL863. 1987ISOSQL864. 1989ISOSQL86SQL895. 1992ISOSQL92SQL26. SQL99SQL3

  • 3.1.2 SQLBASE TABLEVIEW

  • STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT)STUDENT_MALE(SNO,SNAME,SAGE,SDEPT)STUDENTSSEX=SNO,SNAME,SAGE,SDEPTSTUDENT_MALESTUDENT_MALE

  • 3.1 SQL SQL3.1

  • 3.1.3 SQLSQLSQLSQLSQLDBA

  • 5. SQL:QUERYDEFINITIONMANIPULATIONCONTROL

    SQL SERVER 1.12

  • 3.2 SQL SQLDATA DEFINITION LANGUAGEDDL3.2.1 SQLSQL SERVER 91. BIT, INT , SMALLINT, TINYINT2. NUMERICDECIMALDECIMAL123.08000.56

  • 3. FLOATREAL1.23E+104. DATETIMESMALLDATETIME1998-06-08 15:30:005. CHAR, VARCHAR, TEXT6. UNICODEUNICODENCHAR, NVARCHARNTEXTUNICODE27. BINARY, VARBINARYIMAGE OX5F3C

  • 8. MONEY SMALLMONEY123.00009. UNIQUEIDENTIFIER TIMESTAMPTIMESTAMPUNIQUEIDENTIFIER

  • 3.2.2

    3.2.2.1 SQL ServerSQL SERVERSP_ADDLOGIN sp_addlogin [ @loginame = ] 'login' [ , [ @passwd = ] 'password' ] [ , [ @defdb = ] 'database' ] [@loginame =] 'login' [@passwd =] 'password' [@defdb =] 'database'

  • 3.1 ZHANGSAN123 sp_addlogin ZHANGSAN, 123,pubs

    3.2.2.2 SP_GRANTDBACCESS sp_grantdbaccess [@loginame =] 'login' [,[@name_in_db =] 'name_in_db'

    [@loginame =] login [@name_in_db =] 'name_in_db' [OUTPUT] 3.2 sp_grantdbaccess zhangsan,zhangsan

  • 3.2.2.3 / sp_revokedbaccess '' sp_droplogin

    3.2.2.4 LOGIN NAME USER NAME login nameuser name user namelogin name

  • 3.2.2 CREATE DATABASE 3.2.3 3.2.3.1 1. 1128#AT(@)23.23

  • UNICODEBINARYVARBINARYIMAGE12345.67883

  • NPSBINARY(N) -------- BINARY(10)CHAR(N) -------- CHAR(20)NUMERIC(P,[S]) ------- NUMERIC(8,3)INT41001044NULLDEFAULTDEFAULT

  • 2. SQLSQLCREATE TABLECREATE TABLE ([{|}])

    128S,SC,C[DEFAULT] [{}]DEFAULT

  • 3.4 USE STUDENTCREATE TABLE S(SNO CHAR(8) ,SN VARCHAR(20),AGE INT,SEX CHAR(2) DEFAULT '' ,DEPT VARCHAR(20));SEX

  • 3. SQL SERVER,[ CONSTRAINT ]

  • SQL SERVER1NULL/NOT NULLNULLNULL0NULLNOT NULL[CONSTRAINT ][NULL|NOT NULL]

  • 3.5 SSNONOT NULLUSE STUDENTCREATE TABLE S(SNO CHAR(10) CONSTRAINT S_CONS NOT NULLSN VARCHAR(20),AGE INT,SEX CHAR(2) DEFAULT ,DEPT VARCHAR(20));SNONOT NULLNULLS_CONS

  • USE STUDENTCREATE TABLE S(SNO CHAR(10) NOT NULL ,SN VARCHAR(20),AGE INT,SEX CHAR(2) DEFAULT '' ,DEPT VARCHAR(20));

  • 2UNIQUEUNIQUEUNIQUENULLUNIQUEUNIQUE[CONSTRAINT ] UNIQUE3.6 SSNUSE STUDENTCREATE TABLE S(SNO CHAR(6),SN CHAR(8) CONSTRAINT SN_UNIQ UNIQUE,SEX CHAR(2),AGE NUMERIC(2));

  • SN_UNIQUSE STUDENTCREATE TABLE S(SNO CHAR(6),SN CHAR(8) UNIQUE,SEX CHAR(2),AGE NUMERIC(2));

    UNIQUE

    [CONSTRAINT ] UNIQUE[{,}]

  • 3.7 SSN+SEXUSE STUDENTCREATE TABLE S ( SNO CHAR(5),SN CHAR(8),SEX CHAR(2),CONSTRAINT S_UNIQ UNIQUE(SN,SEX));SN+SEX

    3PRIMARY KEYPRIMARY KEYNULL

  • PRIMARY KEYUNIQUEPRIMARY KEYUNIQUEPRIMARY KEYUNIQUEUNIQUEPRIMARY KEYPRIMARY KEY

    PRIMARY KEYCONSTRAINT PRIMARY KEY

  • 3.8 SSNOSUSE STUDENTCREATE TABLE S(SNO CHAR(5) NOT NULL CONSTRAINT S_PRIM PRIMARY KEY,SN CHAR(8),AGE NUMERIC(2));

    PRIMARY KEY [CONSTRAINT ]S PRIMARY KEY ([{}])

  • 3.9 SCSNO+CNOSCUSE STUDENTCREATE TABLE SC(SNO CHAR(5) NOT NULL,CNO CHAR(5) NOT NULL,SCORE NUMERIC(3),CONSTRAINT SC_PRIM PRIMARY KEY(SNO,CNO));

  • 4FOREIGN KEYFOREIGN KEYFOREIGN KEY[CONSTRAINT ] FOREIGN KEY REFERENCES ([{}])

  • 3.10 SCSNO,CNOSCUSE STUDENTCREATE TABLE SC(SNO CHAR(5) NOT NULL CONSTRAINT S_FORE FOREIGN KEY REFERENCES S(SNO),CNO CHAR(5) NOT NULL CONSTRAINT C_FORE FOREIGN KEY REFERENCES C(CNO),SCORE NUMERIC(3),CONSTRAINT S_C_PRIM PRIMARY KEY (SNO,CNO));

  • 5CHECKCHECK0-100CHECK[CONSTRAINT ] CHECK ()3.10 SCSCORE 0100USE STUDENTCREATE TABLE SC(SNO CHAR(5),CNO CHAR(5),SCORE NUMERIC(5,1) CONSTRAINT SCORE_CHK CHECK(SCORE>=0 AND SCORE
  • 3.11 USE STUDENTCREATE TABLE S(SNO CHAR(6) CONSTRAINT S_PRIM PRIMARY KEY,SN CHAR(8) CONSTRAINT SN_CONS NOT NULL,AGE NUMERIC(2) CONSTRAINT AGE_CONS NOT NULLCONSTRAINT AGE_CHK CHECK (AGE BETWEEN 15 AND 50),SEX CHAR(2) DEFAULT '',DEPT CHAR(10) CONSTRAINT DEPT_CONS NOT NULL);

  • 3.2.3.2 SQLALTER TABLE1. ADDCREATE TABLEALTER TABLE ADD |

    3.12 SUSE STUDENTALTER TABLE S ADDCLASS_NO CHAR(6),ADDRESS CHAR(40)

  • NULLNOT NULL 3.13 SCSCORE0-100USE STUDENTALTER TABLE SC ADD CONSTRAINT SCORE_CHK CHECK(SCORE BETWEEN 0 AND 100)

  • 2. ALTER ALTER TABLEALTER COLUMN [NULL|NOT NULL]

    3.14 SSNO8USE STUDENTALTER TABLE S ALTER COLUMNSNO CHAR(8)

  • NOT NULLNULL|NOT NULL

    3.DROPALTER TABLEDROP CONSTRAINT

  • 3.15 SAGE_CHKUSE STUDENTALTER TABLE SDROP CONSTRAINT AGE_CHK

    3.2.3.3 RENAMERENAME TO 3.16 SSTUDENTUSE STUDENT RENAME S TO STUDENT

  • 3.2.3.4 DROP TABLE

    3.17 STUDENTUSE STUDENT DROP TABLE STUDENT

  • 3.2.5 3.2.5.1 SQLSQLSQL SERVER 1. 2.

  • 3.2.5.2 1. 2. PRIMARY KEYPRIMARY KEYUNIQUESQL SERVERPRIMARY KEYSQL SERVERPRIMARY KEY3.

  • 3.2.5.3 CREATE INDEXCREATE [UNIQUE] [CLUSTER] INDEX ON ( [] [{,}] [])

    UNIQUECLUSTERASCDESCASC3.18 SCSNOCNOUSE STUDENTCREATE UNIQUE INDEX SCI ON SC(SNO,CNO)

  • SCSCISNOCNOSCSNOSNOCNOUNIQUE(SNO,CNO)

    3.19 TTNCREATE CLUSTER INDEX TI ON T(TN)TTITTN

  • 1. 2. 3.2.5.4 DROP INDEXDROP INDEX .

    3.20 SCSCIDROP INDEX SC.SCI

  • 3.3 SQL3.3.1 SELECTSQLSELECTSELECTSELECT[{}]FROM[{}][WHERE][GROUP BY [HAVING ]][ORDER BY [ASC|DESC]];

  • SELECTSELECT[ALL|DISTINCT][TOP N [PERCENT][WITH TIES]]1 [AS 1][, 2 [ AS 2]][INTO ]FROM 1[[AS] 1][INNER|RIGHT|FULL|OUTER][OUTER]JOIN 2 [[AS] 2]ON

  • SELECT:WHEREFROMSELECTGROUPGROUPHAVINGHAVINGORDER

  • 3.21 SELECT SNO, SN, AGE FROM S

    3.22 SELECT * FROM S * S

    3.23 SELECT DISTINCT SNO FROM SC

    WHERE

  • 3.24 SELECT SNAME NAME, SNO, AGE FROM SNAMESNAME

  • 3.3.2WHEREWHERE1 2 3 3.8

  • 3.3.2.1 3.25 C1SELECT SNO,SCORE FROM SC WHERE CNO=C1

    3.26 85SELECT SNO,CNO,SCORE FROM SC WHERE SCORE>85

  • 3.3.2.2 WHEREANDORNOTNOTANDOR

    3.27 C1C285SELECT SNOCNOSCOREFROM SCWHERECNO=C1 OR CNO=C2 AND SCORE>=85

  • 3.3.2.3 3.28 10001500SELECT TNO,TN,PROFFROM TWHERE SAL BETWEEN 1000 AND 1500SELECT TNO,TN,PROFFROM TWHERE SAL>=1000 AND SAL
  • 3.29 10001500SELECT TNO,TN,PROFFROM TWHERE SAL NOT BETWEEN 1000 AND 15003.2.2.4 IN3.30 C1C2SELECT SNO, CNO, SCORE FROM SC WHERE CNO IN(C1, C2)OR

  • SELECT SNO, CNO, SCORE FROM SC WHERE CNO=C1 OR CNO= C2NOT IN 3.31 C1C2SELECT SNO, CNO, SCORE FROM SC WHERE CNO NOT IN(C1, C2)SELECT SNO, CNO, SCORE FROM SC WHERE CNO!=C1 AND CNO!= C2

  • 3.3.2.5 LIKENOT LIKELIKE LIKE %_ 3.32 SELECT TNO, TN FROM TWHERE TN LIKE %

  • 3.33 SELECT TNO, TN FROM TWHERE TN LIKE _ _%3.3.2.6NULL

  • 3.34 SELECT SNO, CNOFROM SCWHERE SCORE IS NULLIS NULLSCORE=NULL

  • 3.2.2SQL3.2

  • 3.35 S1SELECT SUM(SCORE) AS TotalScore, AVG(SCORE) AS AveScoreFROM SCWHERE (SNO = 'S1')

    SUMAVG

  • 3.36 C1SELECT MAX(SCORE) AS MaxScore, MIN(SCORE) AS MinScore, MAX(SCORE) - MIN(SCORE) AS DiffFROM SCWHERE (CNO = 'C1')

    3.37 SELECT COUNT(SNO) FROM SWHERE DEPT=''

  • 3.38 SELECT COUNT(DISTINCT DEPT) AS DeptNum FROM SDISTINCTDEPTCOUNT

    3.39 SELECT COUNT (SCORE) FROM SC

  • 3.40 COUNT(*)SELECT COUNT(*) FROM SWHERE DEPT=

    COUNT*DISTINCT

  • 3.3.3 GROUP BY

    3.42 SELECT TNO,COUNT(*) AS C_NUMFROM TCGROUP BY TNO

    GROUP BYTNOTNOCOUNT

  • HAVING

    3.43 SELECT SNO,COUNT(*) AS SC_NUM FROM SCGROUP BY SNO HAVING COUNT(*)>=2

    GROUP BYSNOSNOCOUNTHAVINGCOUNT*>=2

  • SQLWHEREGROUP BY HAVINGWHEREGROUP BY HAVING

    WHEREHAVINGWHEREHAVINGGROUP BYGROUP BYHAVING

  • 3.3.5 ORDER BYORDER BYDESCASC

    3.44 C1 SELECT SNO, SCOREFROM SCWHERE CNO='C1'ORDER BY SCORE DESC

  • 3.45 C2C3C4C5SELECT SNO,CNO, SCORE FROM SCWHERE CNO IN ('C2' ,'C3', 'C4','C5')ORDER BY SNO,SCORE DESC

    3.46 SELECT SNO,SUM(SCORE) AS TotalScore FROM SCWHERE SCORE>=60GROUP BY SNOHAVING COUNT(*)>=3ORDER BY SUM(SCORE) DESC

  • 1.FROMSC2.WHERESCORE>=603.GROUP BYSNO4.HAVING5.SELECT6.ORDER BY

    ORDER BY SUM(SCORE) DESC ORDER BY 2 DESC2

  • 3.3.6 1FROMWHERE2JOIN

  • INNER JOIN LEFT OUTER JOINNULLRIGHT OUTER JOINNULLFULL OUTER JOINNULLCROSS JOIN

    JOIN FROMON

  • 3.3.6.1 3.47 1SELECT T.TNO ,TN,CNOFROM T,TCWHERE (T.TNO = TC. TNO) AND (TN=)

    TN=T.TNO = TC.TNO TNO[.] [.] ,

  • TNOTNTTNO TCTNOTNTNCNO

    2SELECT T.TNO,TN,CNOFROM T INNER JOIN TC ON T.TNO=TC.TNO AND T.TN=''

  • 3SELECT R2.TNO,R2.TN, R1.CNO FROM(SELECT TNO,CNO FROM TC ) AS R1INNER JOIN (SELECT TNO ,TN FROM TWHERE TN='') AS R2ON R1.TNO=R2.TNO

  • 3.48 SELECT S.SNO,SN,CN,SCOREFROM S,C,SCWHERE S.SNO=SC.SNO AND SC.CNO=C.CNO

    WHERE

  • 3.3.6.2 3.49 TTXYX, Y T

    1SELECT X.TN,X.SAL AS SAL_a,Y.SAL AS SAL_b FROM T AS X ,T AS Y WHERE X.SAL>Y.SAL AND Y.TN=''

  • 2SELECT X.TN, X.SAL,Y.SAL FROM T AS X INNER JOIN T AS YON X.SAL>Y.SAL AND Y.TN=''

    3SELECT R1.TN,R1.SAL, R2.SAL FROM (SELECT TN,SAL FROM T ) AS R1INNER JOIN (SELECT SAL FROM TWHERE TN='') AS R2ON R1.SAL>R2.SAL

  • 3.50 1SELECT SN,AGE,CNFROM S,C,SCWHERE S.SNO=SC.SNO AND SC.CNO=C.CNO2SELECT R3.SNO,R3.SN,R3.AGE,R4.CNFROM(SELECT SNO,SN,AGE FROM S) AS R3INNER JOIN(SELECT R2.SNO,R1.CNFROM(SELECT CNO,CN FROM C) AS R1INNER JOIN (SELECT SNO,CNO FROM SC) AS R2ON R1.CNO=R2.CNO) AS R4ON R3.SNO=R4.SNO

  • 3.3.6.3 3.483.483.51 SQL SELECT S.SNO,SN,CN,SCOREFROM SLEFT OUTER JOIN SCON S.SNO=SC.SNOLEFT OUTER JOIN CON C.CNO=SC.CNO

  • 3.3.7 WHERESELECT-FROM-WHERE255SQL

  • 3.3.7.1 =, >, =,
  • , SELECT TNO,TNFROM TWHERE PROF=

  • 3.3.7.2 ANYALL1. ANY3.53 C5SELECT TNFROM TWHERE TNO=ANY (SELECT TNO FROM TC WHERE CNO='C5')

  • C5(T2,T3,T5)ANYT2T3T5

    SELECT TNFROM T,TCWHERE T.TNO=TC.TNOAND TC.CNO='C5

  • 3.54 SELECT TN,SALFROM TWHERE SAL>ANY (SELECT SAL FROM T WHERE DEPT='') AND DEPT!= '' /**/(1500,900)1500900

  • SELECT TN,SALFROM TWHERE SAL> (SELECT MIN(SAL ) FROM T WHERE DEPT='') AND DEPT!= MIN900900

  • 2. ININ=ANY3.553.53SELECT TNFROM TWHERE TNO IN (SELECT TNO FROM TC WHERE CNO='C5')

  • 3. ALLALL3.56 SELECT TN,SALFROM TWHERE SAL>ALL (SELECT SAL FROM T WHERE DEPT='') AND DEPT!=

    (1500,900)1500

  • SELECT TN,SALFROM TWHERE SAL> (SELECT MAX(SAL )FROM T WHERE DEPT='') AND DEPT!=

    MAX1500

  • 3.57 C5SELECT DISTINCT TNFROM TWHERE 'C5' !=ALL (SELECT CNO FROM TC WHERE TNO=T.TNO)!=ALLNOT IN!=ALLTTNO

  • TC5 C5

    4. EXISTSEXISTSEXISTSWHERENOT EXISTSINEXISTS

  • 3.583.53SELECT TNFROM TWHERE EXISTS (SELECT * FROM TC WHERE TNO=T.TNOAND CNO='C5')

    TCWHERETN

  • 3.59 SELECT SN FROM S WHERE NOT EXISTS (SELECT * FROM C WHERE NOT EXISTS (SELECT * FROM SC WHERE SNO = S.SNO AND CNO=C.CNO))

    SC

  • 3.4 SQL SQLDML3.4.1 INSERT INTO

    3.4.1.1 INSERT INTO [([,])] VALUES() VALUES

  • VALUES 3.60 SS721INSERT INTO SVALUES ('s7','','',21,'')INTOVALUES

  • 3.4.1.2

    3.61 SCS7,C1INSERT INTO SC (SNO,CNO)VALUES ('s7',c1')

    VALUESINTOINTOSCORENOT NULL

  • 3.4.1.3 INSERT INTO [([,])]3.62 AVGSALAVGSALCREATE TABLE AVGSAL(DEPARTMENT VARCHAR(20),AVGSAL SMALLINT)

  • TAVGSALINSERT INTO AVGSALSELECT DEPT,AVG(SAL) FROM TGROUP BY DEPT

  • 2.4.2SQLUPDATEUPDATE SET = [,=][WHERE ]SETWHEREWHERE

  • 3.4.2.1 3.63 UPDATE T SET DEPT='' WHERE TN=''

    3.4.2.2 3.64 1UPDATE S SET AGE=AGE+1

  • 3.65 100020%

    UPDATE T SET SAL=1.2*SALWHERE PROF='' AND SAL

  • 3.4.2.3

    3.66 C5100UPDATE T SET COMN=COMN+100WHERE TNO IN (SELECT T.TNO FROM T,TCWHERE T.TNO=TC.TNOAND TC.CNO='C5')

    C5

  • 3.4.2.4

    3.67 1.2

    UPDATE TSET SAL =(SELECT 1.2*AVG(SAL) FROM T)

  • 3.4.3 DELETEDELETE FROM[WHERE ]WHEREWHERE

  • 3.4.3.1 3.68 DELETE FROM T WHERE TN=

    3.4.3.2 3.69 DELETE FROM TCTC

  • 3.4.3.3

    3.70 DELETEFROM TC WHERE TNO= (SELECT TNO FROM T WHERE TN= )

  • 3.5 3.5.1 3.5.1.1 CREATE VIEWCREATE VIEW [()]AS

  • 1.2.ORDER BY DISTINCT

    3.71 SUB_TCREATE VIEW SUB_TAS SELECT TNO,TN,PROFFROM T WHERE DEPT =''

  • SUB_TTNO,TN,PROFSUB_TTNO,TN,PROF

    SELECT

  • 3.72 S_SC_CCREATE VIEW S_SC_C(SNO, SN, CN, SCORE) AS SELECT S.SNO, SN, CN, SCOREFROM S, C, SCWHERE S.SNO = SC.SNO AND SC.CNO = C.CNO

    SSCSNO

  • 3.73 S_AVGCREATE VIEW S_AVG (SNO,AVG)AS SELECT SNO, AVG (SCORE)FROM SC GROUP BY SNO

    AVG

  • 3.5.1.2 DROP VIEW

    3.74 SUB_TDROP VIEW SUB_T

  • 3.5.2 3.75SUB_TSELECT TNO,TNFROM SUB_T WHERE PROF=''

  • SUB_TTView Resolution,SELECT TNO,TNFROM T WHERE DEPT =AND PROF=

  • 3.5.3

  • 3.5.3.1 INSERT3.76 SUB_TT6INSERT INTO SUB_TVALUES ('T6','','')SUB_TTINSERT INTO TVALUES (T6, )

  • 3.5.3.2 UPDATE3.77 SUB_T UPDATE SUB_T SET PROF = ''WHERE TN =

    UPDATE TSET PROF=WHERE TN=AND DEPT=

  • 3.5.3.3 DELETE3.78 SUB_TDELETE FROM SUB_TWHERE TN=DELETE FROM TWHERE TN= AND DEPT=

  • 1. ,2. 3.753.

  • 3.6 SQL SQLDCL(Data Control Language)3.6.1 3.6.1.1SQL

  • SQL SERVERCREATE TABLESELECTINSERTUPDATEDELETE3.6.1.2

  • 3.6.2 3.6.2.1 SQLGRANTGRANT | [,|]TO ||PUBLIC[,|][WITH ADMIN OPTION]:PULBICWITH ADMIN OPTION

  • 3.79 ZHANGSANCREATE TABLEGRANT CREATE TABLE TO ZHANGSAN

    3.6.2.2 REVOKEREVOKE | [,|]FROM ||PUBLIC[,|]3.80 ZHANGSANCREATE TABLEREVOKE CREATE TABLE FROM ZHANGSAN

  • 3.6.3 3.6.3.1 SQLGRANTGRANT ALL|[([,])][,]ON TO ||PUBLIC[,|][WITH GRANT OPTION]

  • ALLINSERTUPDATEONWITH ADMIN OPTION

  • 3.81 STUSER1USER2GRANT ALLON S,TTO USER1,USER2

    3.82 CGRANT SELECTON CTO PUBLIC

  • 3.83 TUSER3,GRANT SELECT,UPDATE(PROF)ON TTO USER3WITH grant OPTIONUSER3GRANTUSER3USER4:GRANT SELECT,UPDATE(PROF)ON TTO USER4

  • 3.6.3.2 REVOKEREVOKE | [,|]FROM ||PUBLIC[,|]

    3.84 USER1CREVOKE SELECT ON CFROM USER1

  • 3.85 USER3TREVOKE SELECT,UPDATE(PROF)ON TFROM USER3 cascade

    3.83USER3TUSER4USER3TUSER4T

  • SQL SERVERSQLSQLSQL3.393.3 SQL