├── AdaptiveDecisionNet ├── arguments.py ├── crossvalidation.py ├── models.py ├── pretreatment.py ├── supervised.py └── train_network.py ├── AlphaJoin1.0 ├── 0.arguments.py ├── 1.getResource.py ├── 2.getQueryEncode.py ├── 3.models.py ├── 4.supervised.py ├── 5.pretreatment.py ├── 6.train_network.py ├── 7.mcts.py └── 8.findBestPlan.py ├── README.md ├── resource └── jobquery │ ├── 10a.sql │ ├── 10b.sql │ ├── 10c.sql │ ├── 11a.sql │ ├── 11b.sql │ ├── 11c.sql │ ├── 11d.sql │ ├── 12a.sql │ ├── 12b.sql │ ├── 12c.sql │ ├── 13a.sql │ ├── 13b.sql │ ├── 13c.sql │ ├── 13d.sql │ ├── 14a.sql │ ├── 14b.sql │ ├── 14c.sql │ ├── 15a.sql │ ├── 15b.sql │ ├── 15c.sql │ ├── 15d.sql │ ├── 16a.sql │ ├── 16b.sql │ ├── 16c.sql │ ├── 16d.sql │ ├── 17a.sql │ ├── 17b.sql │ ├── 17c.sql │ ├── 17d.sql │ ├── 17e.sql │ ├── 17f.sql │ ├── 18a.sql │ ├── 18b.sql │ ├── 18c.sql │ ├── 19a.sql │ ├── 19b.sql │ ├── 19c.sql │ ├── 19d.sql │ ├── 1a.sql │ ├── 1b.sql │ ├── 1c.sql │ ├── 1d.sql │ ├── 20a.sql │ ├── 20b.sql │ ├── 20c.sql │ ├── 21a.sql │ ├── 21b.sql │ ├── 21c.sql │ ├── 22a.sql │ ├── 22b.sql │ ├── 22c.sql │ ├── 22d.sql │ ├── 23a.sql │ ├── 23b.sql │ ├── 23c.sql │ ├── 24a.sql │ ├── 24b.sql │ ├── 25a.sql │ ├── 25b.sql │ ├── 25c.sql │ ├── 26a.sql │ ├── 26b.sql │ ├── 26c.sql │ ├── 27a.sql │ ├── 27b.sql │ ├── 27c.sql │ ├── 28a.sql │ ├── 28b.sql │ ├── 28c.sql │ ├── 29a.sql │ ├── 29b.sql │ ├── 29c.sql │ ├── 2a.sql │ ├── 2b.sql │ ├── 2c.sql │ ├── 2d.sql │ ├── 30a.sql │ ├── 30b.sql │ ├── 30c.sql │ ├── 31a.sql │ ├── 31b.sql │ ├── 31c.sql │ ├── 32a.sql │ ├── 32b.sql │ ├── 33a.sql │ ├── 33b.sql │ ├── 33c.sql │ ├── 3a.sql │ ├── 3b.sql │ ├── 3c.sql │ ├── 4a.sql │ ├── 4b.sql │ ├── 4c.sql │ ├── 5a.sql │ ├── 5b.sql │ ├── 5c.sql │ ├── 6a.sql │ ├── 6b.sql │ ├── 6c.sql │ ├── 6d.sql │ ├── 6e.sql │ ├── 6f.sql │ ├── 7a.sql │ ├── 7b.sql │ ├── 7c.sql │ ├── 8a.sql │ ├── 8b.sql │ ├── 8c.sql │ ├── 8d.sql │ ├── 9a.sql │ ├── 9b.sql │ ├── 9c.sql │ └── 9d.sql └── tools ├── JDBCUtil.java ├── dropCache.sh ├── gethintresult.java ├── getoriginruntime.java ├── getruntimerandom.java └── postgresql-42.2.6.jar /AdaptiveDecisionNet/arguments.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | 3 | # get the arguments... 4 | def get_args(): 5 | parse = argparse.ArgumentParser(description='nn') 6 | parse.add_argument('--env-name', type=str, default='postgresql', help='the training environment') 7 | parse.add_argument('--save-dir', type=str, default='saved_models/', help='the folder that save the models') 8 | 9 | # get args... 10 | args = parse.parse_args() 11 | 12 | return args 13 | -------------------------------------------------------------------------------- /AdaptiveDecisionNet/crossvalidation.py: -------------------------------------------------------------------------------- 1 | from arguments import get_args 2 | from supervised import supervised 3 | 4 | if __name__ == '__main__': 5 | args = get_args() 6 | trainer = supervised(args) 7 | trainer.pretreatment("./data/runtime.csv") 8 | 9 | for i in range(trainer.datasetnumber): 10 | trainer.load_data(i) 11 | trainer.supervised() 12 | trainer.test_network() 13 | trainer.trainList.clear() 14 | trainer.testList.clear() -------------------------------------------------------------------------------- /AdaptiveDecisionNet/models.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torch.nn.functional as F 4 | 5 | 6 | class ValueNet(nn.Module): 7 | def __init__(self, in_dim, out_dim): 8 | super(ValueNet, self).__init__() 9 | self.dim = in_dim 10 | self.layer1 = nn.Sequential(nn.Linear(in_dim, 2048), nn.ReLU(True)) 11 | self.layer2 = nn.Sequential(nn.Linear(2048, 512), nn.ReLU(True)) 12 | self.layer3 = nn.Sequential(nn.Linear(512, 128), nn.ReLU(True)) 13 | self.layer4 = nn.Sequential(nn.Linear(128, 32), nn.ReLU(True)) 14 | self.layer5 = nn.Sequential(nn.Linear(32, out_dim), nn.Softmax(dim = 0)) 15 | 16 | def forward(self, x): 17 | # x = x.reshape(-1, self.dim) 18 | x = self.layer1(x) 19 | # x = nn.functional.dropout(x, p=0.5, training=self.training) 20 | x = self.layer2(x) 21 | # x = nn.functional.dropout(x, p=0.5, training=self.training) 22 | x = self.layer3(x) 23 | # x = nn.functional.dropout(x, p=0.5, training=self.training) 24 | x = self.layer4(x) 25 | # x = nn.functional.dropout(x, p=0.5, training=self.training) 26 | x = self.layer5(x) 27 | return x 28 | 29 | -------------------------------------------------------------------------------- /AdaptiveDecisionNet/pretreatment.py: -------------------------------------------------------------------------------- 1 | from arguments import get_args 2 | from supervised import supervised 3 | 4 | if __name__ == '__main__': 5 | args = get_args() 6 | 7 | trainer = supervised(args) 8 | trainer.pretreatment("./data/runtime.csv") 9 | 10 | -------------------------------------------------------------------------------- /AdaptiveDecisionNet/supervised.py: -------------------------------------------------------------------------------- 1 | # coding=utf-8 2 | 3 | from datetime import datetime 4 | import time 5 | import random 6 | import os 7 | import numpy as np 8 | import torch 9 | import pickle 10 | from models import ValueNet 11 | 12 | shortToLongPath = '../resource/shorttolong' 13 | queryEncodedDictPath = './queryEncodedDict' 14 | 15 | 16 | class data: 17 | def __init__(self, queryname, state, origintime, qpopttime, label): 18 | self.queryname = queryname 19 | self.state = state 20 | self.origintime = origintime 21 | self.qpopttime = qpopttime 22 | self.label = label 23 | 24 | 25 | class supervised: 26 | def __init__(self, args): 27 | # Read dict predicatesEncoded 28 | f = open(queryEncodedDictPath, 'r') 29 | a = f.read() 30 | self.queryEncodedDict = eval(a) 31 | f.close() 32 | 33 | # Read all tablenames and get tablename-number mapping 34 | tables = [] 35 | f = open(shortToLongPath, 'r') 36 | a = f.read() 37 | short_to_long = eval(a) 38 | f.close() 39 | for i in short_to_long.keys(): 40 | tables.append(i) 41 | tables.sort() 42 | self.table_to_int = {} 43 | for i in range(len(tables)): 44 | self.table_to_int[tables[i]] = i 45 | 46 | # The dimension of the network input vector 47 | self.num_inputs = len(tables) * len(tables) + len(self.predicatesEncodeDict["1a"]) 48 | # The dimension of the vector output by the network 49 | self.num_output = 2 50 | self.args = args 51 | 52 | # build up the network 53 | self.actor_net = ValueNet(self.num_inputs, self.num_output) 54 | self.actor_net.apply(self.init_weights) 55 | # check some dir 56 | if not os.path.exists(self.args.save_dir): 57 | os.mkdir(self.args.save_dir) 58 | 59 | self.datasetnumber = 4 60 | self.trainList = [] 61 | self.testList = [] 62 | 63 | # Divide training set and test set 64 | def pretreatment(self, path): 65 | print("Pretreatment running...") 66 | start = time.clock() 67 | # Load data uniformly and randomly select for training 68 | file_test = open(path) 69 | line = file_test.readline() 70 | dataList = [] 71 | while line: 72 | queryName = line.split(",")[0].encode('utf-8').decode('utf-8-sig').strip() 73 | state = self.queryEncodedDict[queryName] 74 | origintime = int(float(line.split(",")[1].strip())) 75 | qpopttime = int(float(line.split(",")[2].strip())) 76 | label = int(line.split(",")[3].strip()) 77 | temp = data(queryName, state, origintime, qpopttime, label) 78 | dataList.append(temp) 79 | line = file_test.readline() 80 | 81 | random.shuffle(dataList) 82 | listtemp = [] 83 | for i in range(self.datasetnumber): 84 | temptemp = [] 85 | listtemp.append(temptemp) 86 | for i in range(dataList.__len__()): 87 | listtemp[i % listtemp.__len__()].append(dataList[i]) 88 | for i in range(listtemp.__len__()): 89 | filepath = "./data/data" + str(i) + ".sql" 90 | file = open(filepath, 'wb') 91 | pickle.dump(len(listtemp[i]), file) 92 | for value in listtemp[i]: 93 | pickle.dump(value, file) 94 | file.close() 95 | 96 | elapsed = (time.clock() - start) 97 | print("Pretreatment time used:", elapsed) 98 | 99 | # train 100 | def supervised(self): 101 | # model_path = self.args.save_dir + 'supervised.pt' 102 | # self.actor_net.load_state_dict(torch.load(model_path, map_location=lambda storage, loc: storage)) 103 | # self.actor_net.eval() 104 | self.load_data() 105 | 106 | optim = torch.optim.SGD(self.actor_net.parameters(), lr=0.0005) 107 | # loss_func = torch.nn.MSELoss() 108 | loss_func = torch.nn.NLLLoss() 109 | loss1000 = 0 110 | count = 0 111 | 112 | # starttime = datetime.now() 113 | for step in range(1, 300001): 114 | index = random.randint(0, len(self.trainList) - 1) 115 | state = self.trainList[index].state 116 | state_tensor = torch.tensor(state, dtype=torch.float32) 117 | 118 | predictionRuntime = torch.log(self.value_net(state_tensor) + 1e-10) 119 | predictionRuntime = predictionRuntime.view(1,-1) 120 | 121 | label = [] 122 | label.append(self.dataList[index].label) 123 | label_tensor = torch.tensor(label) 124 | 125 | loss = loss_func(predictionRuntime, label_tensor) 126 | optim.zero_grad() 127 | loss.backward() 128 | optim.step() 129 | loss1000 += loss.item() 130 | if step % 1000 == 0: 131 | print('[{}] Epoch: {}, Loss: {:.5f}'.format(datetime.now(), step, loss1000)) 132 | loss1000 = 0 133 | # if step % 2000000 == 0: 134 | # torch.save(self.actor_net.state_dict(), self.args.save_dir + 'supervised.pt') 135 | # self.test_network() 136 | torch.save(self.actor_net.state_dict(), self.args.save_dir + 'supervised.pt') 137 | 138 | # functions to test the network 139 | def test_network(self): 140 | self.load_data() 141 | model_path = self.args.save_dir + 'supervised.pt' 142 | self.actor_net.load_state_dict(torch.load(model_path, map_location=lambda storage, loc: storage)) 143 | self.actor_net.eval() 144 | 145 | # testset 146 | correct = 0 147 | for step in range(self.testList.__len__()): 148 | state = self.testList[step].state 149 | state_tensor = torch.tensor(state, dtype=torch.float32) 150 | 151 | prediction = self.actor_net(state_tensor).detach().cpu().numpy() 152 | maxindex = np.argmax(prediction) 153 | print(self.testList[step].queryname, ",", self.testList[step].origintime, ",", 154 | self.testList[step].qpopttime, ",", 155 | self.testList[step].label, ",", maxindex) 156 | if maxindex == self.testList[step].label: 157 | correct += 1 158 | print("testset:", correct, "\t", self.testList.__len__()) 159 | 160 | # trainset 161 | correct1 = 0 162 | for step in range(self.trainList.__len__()): 163 | state = self.trainList[step].state 164 | state_tensor = torch.tensor(state, dtype=torch.float32) 165 | 166 | predictionRuntime = self.actor_net(state_tensor) 167 | prediction = predictionRuntime.detach().cpu().numpy() 168 | maxindex = np.argmax(prediction) 169 | label = self.trainList[step].label 170 | # print(self.trainList[step].queryname.strip(), "\t", label, "\t", maxindex) 171 | if maxindex == label: 172 | correct1 += 1 173 | print("trainset", correct1, "\t", self.trainList.__len__()) 174 | 175 | def load_data(self, testnum=0): 176 | if self.trainList.__len__() != 0: 177 | return 178 | testpath = "./data/data" + str(testnum) + ".sql" 179 | file_test = open(testpath, 'rb') 180 | l = pickle.load(file_test) 181 | for _ in range(l): 182 | self.testList.append(pickle.load(file_test)) 183 | file_test.close() 184 | 185 | for i in range(self.datasetnumber): 186 | if i == testnum: 187 | continue 188 | trainpath = "./data/data" + str(i) + ".sql" 189 | file_train = open(trainpath, 'rb') 190 | l = pickle.load(file_train) 191 | for _ in range(l): 192 | self.trainList.append(pickle.load(file_train)) 193 | file_train.close() 194 | print("load data\ttrainSet:", self.trainList.__len__(), " testSet:", self.testList.__len__()) 195 | 196 | def init_weights(self, m): 197 | if type(m) == torch.nn.Linear: 198 | torch.nn.init.xavier_uniform_(m.weight) 199 | m.bias.data.fill_(0.01) 200 | -------------------------------------------------------------------------------- /AdaptiveDecisionNet/train_network.py: -------------------------------------------------------------------------------- 1 | from arguments import get_args 2 | from supervised import supervised 3 | 4 | if __name__ == '__main__': 5 | args = get_args() 6 | 7 | trainer = supervised(args) 8 | trainer.supervised() 9 | trainer.test_network() -------------------------------------------------------------------------------- /AlphaJoin1.0/0.arguments.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | 3 | # get the arguments... 4 | def get_args(): 5 | parse = argparse.ArgumentParser(description='nn') 6 | parse.add_argument('--env-name', type=str, default='postgresql', help='the training environment') 7 | parse.add_argument('--save-dir', type=str, default='saved_models/', help='the folder that save the models') 8 | 9 | # get args... 10 | args = parse.parse_args() 11 | 12 | return args 13 | -------------------------------------------------------------------------------- /AlphaJoin1.0/1.getResource.py: -------------------------------------------------------------------------------- 1 | # The original table name is sequentially transferred to the corresponding queryName file 2 | import numpy as np 3 | 4 | querydir = '../resource/jobquery' # JOB query 5 | tablenamedir = '../resource/jobtablename' # tablename involved in the query statement 6 | shorttolongpath = '../resource/shorttolong' # Mapping of table abbreviations to full names 7 | 8 | def getResource(): 9 | 10 | short_to_long = {} 11 | fileList = os.listdir(querydir) 12 | fileList.sort() 13 | for queryName in fileList: 14 | # queryName = "9d.sql" 15 | querypath = querydir + "/" + queryName 16 | file_object = open(querypath) 17 | file_context = file_object.readlines() 18 | # print(file_context) 19 | file_object.close() 20 | 21 | j = 0 22 | k = 0 23 | tablenames = [] 24 | for i in range(len(file_context)): 25 | if file_context[i].find("FROM") != -1: 26 | break 27 | j = j + 1 28 | for i in range(len(file_context)): 29 | if file_context[i].find("WHERE") != -1: 30 | break 31 | k = k + 1 32 | 33 | # The original table name is sequentially transferred to the corresponding queryName file, update tablename 34 | for i in range(j, k - 1): 35 | temp = file_context[i].split() 36 | tablenames.append(temp[temp.index("AS") + 1][:-1].lower()) 37 | temp = file_context[k - 1].split() 38 | tablenames.append(temp[temp.index("AS") + 1].lower()) 39 | 40 | f = open(tablenamedir + "/" + queryName[:-4], 'w') 41 | f.write(str(tablenames)) 42 | f.close() 43 | # print(queryName, tablenames) 44 | 45 | # Read query 46 | querypath = querydir + "/" + queryName 47 | file_object = open(querypath) 48 | file_context = file_object.read() 49 | file_object.close() 50 | 51 | scan_language = [] 52 | for line in rows: 53 | if line[0].find('Scan') != -1 & line[0].find('Bitmap Index') == -1: 54 | scan_language.append(line[0]) 55 | for language in scan_language: 56 | word = language.split(' ') 57 | index = word.index('on') 58 | short_to_long[word[index + 2]] = word[index + 1] 59 | 60 | print(len(short_to_long)) 61 | 62 | # Dump two dict to corresponding files 63 | f = open(shorttolongpath, 'w') 64 | f.write(str(short_to_long)) 65 | f.close() 66 | 67 | cur.close() 68 | conn.close() 69 | 70 | 71 | if __name__ == '__main__': 72 | getResource() -------------------------------------------------------------------------------- /AlphaJoin1.0/2.getQueryEncode.py: -------------------------------------------------------------------------------- 1 | import os 2 | from getResource import getResource 3 | 4 | querydir = '../resource/jobquery' 5 | tablenamedir = '../resource/jobtablename' 6 | shorttolongpath = '../resource/shorttolong' 7 | predicatesEncodeDictpath = './predicatesEncodedDict' 8 | queryEncodeDictpath = './queryEncodedDict' 9 | 10 | # Get all the attributes used to select the filter vector 11 | def getQueryAttributions(): 12 | fileList = os.listdir(querydir) 13 | fileList.sort() 14 | attr = set() 15 | 16 | for queryName in fileList: 17 | querypath = querydir + "/" + queryName 18 | file_object = open(querypath) 19 | file_context = file_object.readlines() 20 | file_object.close() 21 | 22 | # find WHERE 23 | k = -1 24 | for i in range(len(file_context)): 25 | k = k + 1 26 | if file_context[i].find("WHERE") != -1: 27 | break 28 | 29 | # handle a sentence after WHERE 30 | for i in range(k, len(file_context)): 31 | temp = file_context[i].split() 32 | for word in temp: 33 | if '.' in word: 34 | if word[0] == "'": 35 | continue 36 | if word[0] == '(': 37 | word = word[1:] 38 | if word[-1] == ';': 39 | word = word[:-1] 40 | attr.add(word) 41 | 42 | attrNames = list(attr) 43 | attrNames.sort() 44 | return attrNames 45 | 46 | def getQueryEncode(attrNames): 47 | 48 | # Read all table abbreviations 49 | f = open(shorttolongpath, 'r') 50 | a = f.read() 51 | short_to_long = eval(a) 52 | f.close() 53 | tableNames = [] 54 | 55 | for i in short_to_long: 56 | tableNames.append(i) 57 | tableNames.sort() 58 | 59 | # Mapping of table name abbreviations and numbers (list subscripts) 60 | table_to_int = {} 61 | int_to_table = {} 62 | for i in range(len(tableNames)): 63 | int_to_table[i] = tableNames[i] 64 | table_to_int[tableNames[i]] = i 65 | 66 | # Mapping of attributes and numbers (list subscripts) 67 | attr_to_int = {} 68 | int_to_attr = {} 69 | for i in range(len(attrNames)): 70 | int_to_attr[i] = attrNames[i] 71 | attr_to_int[attrNames[i]] = i 72 | # print(table_to_int) 73 | 74 | 75 | queryEncodeDict = {} 76 | joinEncodeDict = {} 77 | predicatesEncodeDict = {} 78 | fileList = os.listdir(querydir) 79 | fileList.sort() 80 | 81 | for queryName in fileList: 82 | joinEncode = [0 for _ in range(len(tableNames)*len(tableNames))] 83 | predicatesEncode = [0 for _ in range(len(attrNames))] 84 | 85 | # Read query statement 86 | querypath = querydir + "/" + queryName 87 | file_object = open(querypath) 88 | file_context = file_object.readlines() 89 | file_object.close() 90 | 91 | # find WHERE 92 | k = -1 93 | for i in range(len(file_context)): 94 | k = k + 1 95 | if file_context[i].find("WHERE") != -1: 96 | break 97 | 98 | # handle a sentence after WHERE 99 | for i in range(k, len(file_context)): 100 | temp = file_context[i].split() 101 | 102 | if "=" in temp: 103 | index = temp.index("=") 104 | if (filter(temp[index - 1]) in attrNames) & (filter(temp[index + 1]) in attrNames): 105 | table1 = temp[index - 1].split('.')[0] 106 | table2 = temp[index + 1].split('.')[0] 107 | joinEncode[table_to_int[table1] * len(tableNames) + table_to_int[table2]] = 1 108 | joinEncode[table_to_int[table2] * len(tableNames) + table_to_int[table1]] = 1 109 | else: 110 | for word in temp: 111 | if '.' in word: 112 | if word[0] == "'": 113 | continue 114 | if word[0] == '(': 115 | word = word[1:] 116 | if word[-1] == ';': 117 | word = word[:-1] 118 | predicatesEncode[attr_to_int[word]] = 1 119 | else: 120 | for word in temp: 121 | if '.' in word: 122 | if word[0] == "'": 123 | continue 124 | if word[0] == '(': 125 | word = word[1:] 126 | if word[-1] == ';': 127 | word = word[:-1] 128 | predicatesEncode[attr_to_int[word]] = 1 129 | predicatesEncodeDict[queryName[:-4]] = predicatesEncode 130 | queryEncodeDict[queryName[:-4]] = joinEncode + predicatesEncode 131 | 132 | for i in queryEncodeDict.items(): 133 | print(i) 134 | print(len(tableNames), tableNames) 135 | print(len(attrNames), attrNames) 136 | 137 | f = open(predicatesEncodeDictpath, 'w') 138 | f.write(str(predicatesEncodeDict)) 139 | f.close() 140 | f = open(queryEncodeDictpath, 'w') 141 | f.write(str(queryEncodeDict)) 142 | f.close() 143 | 144 | 145 | def filter(word): 146 | if '.' in word: 147 | if word[0] == '(': 148 | word = word[1:] 149 | if word[-1] == ';': 150 | word = word[:-1] 151 | return word 152 | 153 | 154 | if __name__ == '__main__': 155 | getResource() 156 | attrNames = getQueryAttributions() 157 | getQueryEncode(attrNames) 158 | 159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /AlphaJoin1.0/3.models.py: -------------------------------------------------------------------------------- 1 | import torch 2 | import torch.nn as nn 3 | import torch.nn.functional as F 4 | 5 | 6 | class ValueNet(nn.Module): 7 | def __init__(self, in_dim, out_dim): 8 | super(ValueNet, self).__init__() 9 | self.dim = in_dim 10 | self.layer1 = nn.Sequential(nn.Linear(in_dim, 2048), nn.ReLU(True)) 11 | self.layer2 = nn.Sequential(nn.Linear(2048, 512), nn.ReLU(True)) 12 | self.layer3 = nn.Sequential(nn.Linear(512, 128), nn.ReLU(True)) 13 | self.layer4 = nn.Sequential(nn.Linear(128, 32), nn.ReLU(True)) 14 | self.layer5 = nn.Sequential(nn.Linear(32, out_dim), nn.Softmax(dim = 0)) 15 | # self.layer5 = nn.Sequential(nn.Linear(32, out_dim), nn.ReLU(True)) 16 | 17 | def forward(self, x): 18 | # x = x.reshape(-1, self.dim) 19 | x = self.layer1(x) 20 | x = nn.functional.dropout(x, p=0.5, training=self.training) 21 | x = self.layer2(x) 22 | # x = nn.functional.dropout(x, p=0.5, training=self.training) 23 | x = self.layer3(x) 24 | # x = nn.functional.dropout(x, p=0.5, training=self.training) 25 | x = self.layer4(x) 26 | # x = nn.functional.dropout(x, p=0.5, training=self.training) 27 | x = self.layer5(x) 28 | return x -------------------------------------------------------------------------------- /AlphaJoin1.0/4.supervised.py: -------------------------------------------------------------------------------- 1 | from datetime import datetime 2 | import random 3 | import os 4 | import numpy as np 5 | import torch 6 | import pickle 7 | from models import ValueNet 8 | 9 | shortToLongPath = '../resource/shorttolong' 10 | predicatesEncodeDictPath = './predicatesEncodedDict' 11 | 12 | 13 | class data: 14 | def __init__(self, state, time): 15 | self.state = state 16 | self.time = time 17 | self.label = 0 18 | 19 | 20 | class supervised: 21 | def __init__(self, args): 22 | # Read dict predicatesEncoded 23 | f = open(predicatesEncodeDictPath, 'r') 24 | a = f.read() 25 | self.predicatesEncodeDict = eval(a) 26 | f.close() 27 | 28 | # Read all tablenames and get tablename-number mapping 29 | tables = [] 30 | f = open(shortToLongPath, 'r') 31 | a = f.read() 32 | short_to_long = eval(a) 33 | f.close() 34 | for i in short_to_long.keys(): 35 | tables.append(i) 36 | tables.sort() 37 | self.table_to_int = {} 38 | for i in range(len(tables)): 39 | self.table_to_int[tables[i]] = i 40 | 41 | # The dimension of the network input vector 42 | self.num_inputs = len(tables) * len(tables) + len(self.predicatesEncodeDict["1a"]) 43 | # The dimension of the vector output by the network 44 | self.num_output = 5 45 | self.args = args 46 | self.right = 0 47 | 48 | # build up the network 49 | self.value_net = ValueNet(self.num_inputs, self.num_output) 50 | # check some dir 51 | if not os.path.exists(self.args.save_dir): 52 | os.mkdir(self.args.save_dir) 53 | 54 | self.dataList = [] 55 | self.testList = [] 56 | 57 | 58 | # Parsing query plan 59 | def hint2matrix(self, hint): 60 | tablesInQuery = hint.split(" ") 61 | matrix = np.mat(np.zeros((len(self.table_to_int), len(self.table_to_int)))) 62 | stack = [] 63 | difference = 0 64 | for i in tablesInQuery: 65 | if i == ')': 66 | tempb = stack.pop() 67 | tempa = stack.pop() 68 | _ = stack.pop() 69 | b = tempb.split('+') 70 | a = tempa.split('+') 71 | b.sort() 72 | a.sort() 73 | indexb = self.table_to_int[b[0]] 74 | indexa = self.table_to_int[a[0]] 75 | matrix[indexa, indexb] = (len(tablesInQuery) + 2) / 3 - difference 76 | difference += 1 77 | stack.append(tempa + '+' + tempb) 78 | # print(stack) 79 | else: 80 | stack.append(i) 81 | return matrix 82 | 83 | # Divide training set and test set 84 | def pretreatment(self, path): 85 | # Load data uniformly and randomly select for training 86 | file_test = open(path) 87 | line = file_test.readline() 88 | while line: 89 | queryName = line.split(",")[0].encode('utf-8').decode('utf-8-sig').strip() 90 | hint = line.split(",")[1] 91 | matrix = self.hint2matrix(hint) 92 | predicatesEncode = self.predicatesEncodeDict[queryName] 93 | state = matrix.flatten().tolist()[0] 94 | state = state + predicatesEncode 95 | runtime = line.split(",")[2].strip() 96 | if runtime == 'timeout': 97 | runtime = ?? # Depends on your settings 98 | else: 99 | runtime = int(float(runtime)) 100 | temp = data(state, runtime) 101 | self.dataList.append(temp) 102 | line = file_test.readline() 103 | 104 | self.dataList.sort(key=lambda x: x.time, reverse=False) 105 | for i in range(self.dataList.__len__()): 106 | self.dataList[i].label = int(i / (self.dataList.__len__() / self.num_output + 1)) 107 | # print(self.dataList[i].label) 108 | for i in range(int(self.dataList.__len__() * 0.3)): 109 | index = random.randint(0, len(self.dataList) - 1) 110 | temp = self.dataList.pop(index) 111 | self.testList.append(temp) 112 | 113 | print("size of test set:", len(self.testList), "\tsize of train set:", len(self.dataList)) 114 | testpath = "./data/testdata.sql" 115 | file_test = open(testpath, 'wb') 116 | pickle.dump(len(self.testList), file_test) 117 | for value in self.testList: 118 | pickle.dump(value, file_test) 119 | file_test.close() 120 | 121 | trainpath = "./data/traindata.sql" 122 | file_train = open(trainpath, 'wb') 123 | pickle.dump(len(self.dataList), file_train) 124 | for value in self.dataList: 125 | pickle.dump(value, file_train) 126 | file_train.close() 127 | 128 | # functions to train the network 129 | def supervised(self): 130 | self.load_data() 131 | optim = torch.optim.SGD(self.value_net.parameters(), lr=0.01) 132 | # loss_func = torch.nn.MSELoss() 133 | # loss_func = torch.nn.CrossEntropyLoss() 134 | loss_func = torch.nn.NLLLoss() 135 | loss1000 = 0 136 | count = 0 137 | 138 | for step in range(1, 16000001): 139 | index = random.randint(0, len(self.dataList) - 1) 140 | state = self.dataList[index].state 141 | state_tensor = torch.tensor(state, dtype=torch.float32) 142 | 143 | predictionRuntime = torch.log(self.value_net(state_tensor) + 1e-10) 144 | predictionRuntime = predictionRuntime.view(1,-1) 145 | 146 | label = [] 147 | label.append(self.dataList[index].label) 148 | label_tensor = torch.tensor(label) 149 | 150 | loss = loss_func(predictionRuntime, label_tensor) 151 | 152 | optim.zero_grad() 153 | loss.backward() 154 | optim.step() 155 | loss1000 += loss.item() 156 | if step % 1000 == 0: 157 | print('[{}] Epoch: {}, Loss: {:.5f}'.format(datetime.now(), step, loss1000)) 158 | loss1000 = 0 159 | self.test_network() 160 | print('[{}] Epoch: {}, Loss: {:.5f}'.format(datetime.now(), step, loss1000)) 161 | if step % 200000 == 0: 162 | torch.save(self.value_net.state_dict(), self.args.save_dir + 'supervised.pt') 163 | self.test_network() 164 | 165 | # functions to test the network 166 | def test_network(self): 167 | self.load_data() 168 | model_path = self.args.save_dir + 'supervised.pt' 169 | self.actor_net.load_state_dict(torch.load(model_path, map_location=lambda storage, loc: storage)) 170 | self.actor_net.eval() 171 | 172 | correct = 0 173 | for step in range(self.testList.__len__()): 174 | state = self.testList[step].state 175 | state_tensor = torch.tensor(state, dtype=torch.float32) 176 | 177 | predictionRuntime = self.actor_net(state_tensor) 178 | prediction = predictionRuntime.detach().cpu().numpy() 179 | maxindex = np.argmax(prediction) 180 | label = self.testList[step].label 181 | #print(maxindex, "\t", label) 182 | if maxindex == label: 183 | correct += 1 184 | print(correct, self.testList.__len__(), correct/self.testList.__len__(), end = ' ') 185 | 186 | correct1 = 0 187 | for step in range(self.dataList.__len__()): 188 | state = self.dataList[step].state 189 | state_tensor = torch.tensor(state, dtype=torch.float32) 190 | 191 | predictionRuntime = self.actor_net(state_tensor) 192 | # prediction = predictionRuntime.detach().cpu().numpy()[0] 193 | prediction = predictionRuntime.detach().cpu().numpy() 194 | maxindex = np.argmax(prediction) 195 | label = self.dataList[step].label 196 | #print(maxindex, "\t", label) 197 | if maxindex == label: 198 | correct1 += 1 199 | print(correct1, self.dataList.__len__(), correct1/self.dataList.__len__()) 200 | self.right = correct / self.testList.__len__() 201 | 202 | def load_data(self): 203 | if self.dataList.__len__() != 0: 204 | return 205 | testpath = "./data/testdata.sql" 206 | file_test = open(testpath, 'rb') 207 | l = pickle.load(file_test) 208 | for _ in range(l): 209 | self.testList.append(pickle.load(file_test)) 210 | file_test.close() 211 | 212 | trainpath = "./data/traindata.sql" 213 | file_train = open(trainpath, 'rb') 214 | l = pickle.load(file_train) 215 | for _ in range(l): 216 | self.dataList.append(pickle.load(file_train)) 217 | file_train.close() 218 | -------------------------------------------------------------------------------- /AlphaJoin1.0/5.pretreatment.py: -------------------------------------------------------------------------------- 1 | import time 2 | 3 | from arguments import get_args 4 | from supervised import supervised 5 | 6 | if __name__ == '__main__': 7 | args = get_args() 8 | 9 | trainer = supervised(args) 10 | print("Pretreatment running...") 11 | start = time.clock() 12 | trainer.pretreatment("./data/XXX.sql") 13 | elapsed = (time.clock() - start) 14 | print("Pretreatment time used:", elapsed) 15 | -------------------------------------------------------------------------------- /AlphaJoin1.0/6.train_network.py: -------------------------------------------------------------------------------- 1 | from arguments import get_args 2 | from supervised import supervised 3 | 4 | if __name__ == '__main__': 5 | args = get_args() 6 | trainer = supervised(args) 7 | trainer.supervised() 8 | trainer.test_network() -------------------------------------------------------------------------------- /AlphaJoin1.0/7.mcts.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | import time 3 | import math 4 | import random 5 | from copy import deepcopy 6 | import numpy as np 7 | from models import ValueNet 8 | import torch 9 | model_path = './saved_models/supervised.pt' 10 | 11 | predictionNet = ValueNet(856, 5) 12 | predictionNet.load_state_dict(torch.load(model_path, map_location=lambda storage, loc: storage)) 13 | predictionNet.eval() 14 | 15 | 16 | def getReward(state): 17 | inputState = torch.tensor(state.board + state.predicatesEncode, dtype=torch.float32) 18 | with torch.no_grad(): 19 | predictionRuntime = predictionNet(inputState) 20 | prediction = predictionRuntime.detach().cpu().numpy() 21 | maxindex = np.argmax(prediction) 22 | reward = (4 - maxindex) / 4.0 23 | return reward 24 | 25 | 26 | def randomPolicy(state): 27 | while not state.isTerminal(): 28 | try: 29 | temp = state.getPossibleActions() 30 | action = random.choice(temp) 31 | except IndexError: 32 | raise Exception("Non-terminal state has no possible actions: " + str(state)) 33 | state = state.takeAction(action) 34 | # reward = state.getReward() 35 | reward = getReward(state) 36 | # print(reward) 37 | return reward 38 | 39 | 40 | class treeNode(): 41 | def __init__(self, state, parent): 42 | self.state = state 43 | self.isTerminal = state.isTerminal() 44 | self.isFullyExpanded = self.isTerminal 45 | self.parent = parent 46 | self.numVisits = 0 47 | self.totalReward = 0 48 | self.children = {} 49 | 50 | 51 | class mcts(): 52 | def __init__(self, iterationLimit=None, explorationConstant=1 / math.sqrt(2), 53 | rolloutPolicy=randomPolicy): 54 | if iterationLimit == None: 55 | raise ValueError("Must have either a time limit or an iteration limit") 56 | # number of iterations of the search 57 | if iterationLimit < 1: 58 | raise ValueError("Iteration limit must be greater than one") 59 | self.searchLimit = iterationLimit 60 | self.explorationConstant = explorationConstant 61 | self.rollout = rolloutPolicy 62 | 63 | def search(self, initialState): 64 | self.root = treeNode(initialState, None) 65 | for i in range(self.searchLimit): 66 | self.executeRound() 67 | 68 | bestChild = self.getBestChild(self.root, 0) 69 | return self.getAction(self.root, bestChild) 70 | 71 | def executeRound(self): 72 | node = self.selectNode(self.root) 73 | newState = deepcopy(node.state) 74 | reward = self.rollout(newState) 75 | self.backpropogate(node, reward) 76 | 77 | def selectNode(self, node): 78 | while not node.isTerminal: 79 | if node.isFullyExpanded: 80 | node = self.getBestChild(node, self.explorationConstant) 81 | else: 82 | return self.expand(node) 83 | return node 84 | 85 | def expand(self, node): 86 | actions = node.state.getPossibleActions() 87 | for action in actions: 88 | if action not in node.children: 89 | newNode = treeNode(node.state.takeAction(action), node) 90 | node.children[action] = newNode 91 | if len(actions) == len(node.children): 92 | node.isFullyExpanded = True 93 | # if newNode.isTerminal: 94 | # print(newNode) 95 | return newNode 96 | 97 | raise Exception("Should never reach here") 98 | 99 | def backpropogate(self, node, reward): 100 | while node is not None: 101 | node.numVisits += 1 102 | node.totalReward += reward 103 | node = node.parent 104 | 105 | def getBestChild(self, node, explorationValue): 106 | bestValue = float("-inf") 107 | bestNodes = [] 108 | for child in node.children.values(): 109 | nodeValue = child.totalReward / child.numVisits + explorationValue * math.sqrt( 110 | 2 * math.log(node.numVisits) / child.numVisits) 111 | if nodeValue > bestValue: 112 | bestValue = nodeValue 113 | bestNodes = [child] 114 | elif nodeValue == bestValue: 115 | bestNodes.append(child) 116 | return random.choice(bestNodes) 117 | 118 | def getAction(self, root, bestChild): 119 | for action, node in root.children.items(): 120 | if node is bestChild: 121 | return action 122 | -------------------------------------------------------------------------------- /AlphaJoin1.0/8.findBestPlan.py: -------------------------------------------------------------------------------- 1 | from __future__ import division 2 | import os 3 | from copy import deepcopy 4 | from mcts import mcts 5 | import time 6 | 7 | 8 | queryEncodeDictPath = './queryEncodedDict' 9 | predicatesEncodeDictPath = './predicatesEncodedDict' 10 | shorttolongpath = '../resource/shorttolong' 11 | tablenamedir = '../resource/jobtablename' 12 | querydir = "../resource/jobquery" 13 | 14 | f = open(queryEncodeDictPath, 'r') 15 | a = f.read() 16 | queryEncodeDict = eval(a) 17 | f.close() 18 | 19 | f = open(predicatesEncodeDictPath, 'r') 20 | a = f.read() 21 | predicatesEncodeDict = eval(a) 22 | f.close() 23 | 24 | 25 | # Get all tablenames 26 | tables = [] 27 | f = open(shorttolongpath, 'r') 28 | a = f.read() 29 | short_to_long = eval(a) 30 | f.close() 31 | for i in short_to_long.keys(): 32 | tables.append(i) 33 | tables.sort() 34 | 35 | # Mapping of tablename abbreviations and numbers (list subscripts) 36 | totalNumberOfTables = len(tables) 37 | tableToInt = {} 38 | intToTable = {} 39 | for i in range(totalNumberOfTables): 40 | intToTable[i] = tables[i] 41 | tableToInt[tables[i]] = i 42 | 43 | 44 | class planState: 45 | def __init__(self, totalNumberOfTables, numberOfTables, queryEncode, predicatesEncode): 46 | self.tableNumber = totalNumberOfTables 47 | self.currentStep = numberOfTables 48 | self.board = [0 for _ in range(self.tableNumber * self.tableNumber)] 49 | self.joinMartix = queryEncode[:self.tableNumber * self.tableNumber] 50 | self.predicatesEncode = predicatesEncode 51 | 52 | 53 | def getPossibleActions(self): 54 | possibleActions = [] 55 | for i in range(self.tableNumber): 56 | for j in range(self.tableNumber): 57 | if self.joinMartix[i * self.tableNumber + j] == 1: 58 | possibleActions.append(Action(self.currentStep, x=i, y=j)) 59 | return possibleActions 60 | 61 | def takeAction(self, action): 62 | newState = deepcopy(self) 63 | newState.currentStep = self.currentStep - 1 64 | newState.board[action.x * self.tableNumber + action.y] = action.currentStep 65 | newState.joinMartix[action.x * self.tableNumber + action.y] = 0 66 | newState.joinMartix[action.y * self.tableNumber + action.x] = 0 67 | ma = max(action.x, action.y) 68 | mi = min(action.x, action.y) 69 | for i in range(self.tableNumber): 70 | if newState.joinMartix[i * self.tableNumber + ma] == 1: 71 | newState.joinMartix[i * self.tableNumber + ma] = 0 72 | newState.joinMartix[i * self.tableNumber + mi] = 1 73 | if newState.joinMartix[ma * self.tableNumber + i] == 1: 74 | newState.joinMartix[ma * self.tableNumber + i] = 0 75 | newState.joinMartix[mi * self.tableNumber + i] = 1 76 | return newState 77 | 78 | def isTerminal(self): 79 | if self.currentStep == 1: 80 | return True 81 | return False 82 | 83 | class Action: 84 | def __init__(self, step, x, y): 85 | self.currentStep = step 86 | self.x = x 87 | self.y = y 88 | 89 | def __str__(self): 90 | return str((self.x, self.y)) 91 | 92 | def __repr__(self): 93 | return str(self) 94 | 95 | def __eq__(self, other): 96 | return self.__class__ == other.__class__ and self.x == other.x and self.y == other.y and self.currentStep == other.currentStep 97 | 98 | def __hash__(self): 99 | return hash((self.x, self.y, self.currentStep)) 100 | 101 | def decode(currentState, tableList): 102 | tempdect = {} 103 | for i in range(len(tableList)): 104 | tempdect[tableList[i]] = tableList[i] 105 | # Record the number of connections 106 | correctcount = 0 107 | while correctcount != len(tableList) - 1: 108 | index = currentState.board.index(max(currentState.board)) 109 | indexa = int(index / currentState.tableNumber) 110 | indexb = int(index % currentState.tableNumber) 111 | currentState.board[index] = 0 112 | 113 | string = "( " + tempdect[intToTable[indexa]] + " " + tempdect[intToTable[indexb]] + " )" 114 | correctcount += 1 115 | # Update dictionary 116 | for j in string.split(): 117 | if j in tableList: 118 | tempdect[j] = string 119 | 120 | return tempdect[tableList[0]] 121 | 122 | 123 | def findBestPlan(): 124 | queryNameList = os.listdir(tablenamedir) 125 | queryNameList.sort() 126 | searchFactor = 15 127 | for queryName in queryNameList: 128 | # Get the list of queried tables 129 | tablenamepath = tablenamedir + "/" + queryName 130 | file_object = open(tablenamepath) 131 | file_context = file_object.read() 132 | tableList = eval(file_context) 133 | file_object.close() 134 | 135 | # Construct the initial state 136 | initialState = planState(totalNumberOfTables, len(tableList), queryEncodeDict[queryName], 137 | predicatesEncodeDict[queryName]) 138 | currentState = initialState 139 | 140 | mct = mcts(iterationLimit=(int)(len(currentState.getPossibleActions()) * searchFactor)) 141 | start = time.time() 142 | while currentState.currentStep != 1: 143 | # Search for the best choice in the current state 144 | action = mct.search(initialState=currentState) 145 | # Apply the selection, the status changes 146 | currentState = currentState.takeAction(action) 147 | # Change search times 148 | mct.searchLimit = (int)(len(currentState.getPossibleActions()) * searchFactor) 149 | elapsed = (time.time() - start) * 1000 150 | # Decode selected results 151 | hint = decode(currentState, tableList) 152 | print(queryName, ",", hint, ",%.3f" % elapsed) 153 | 154 | if __name__ == '__main__': 155 | findBestPlan() 156 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AlphaJoin 2 | AlphaJoin: Join Order Selection à la AlphaGo 3 | -------------------------------------------------------------------------------- /resource/jobquery/10a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS uncredited_voiced_character, 2 | MIN(t.title) AS russian_movie 3 | FROM char_name AS chn, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | company_type AS ct, 7 | movie_companies AS mc, 8 | role_type AS rt, 9 | title AS t 10 | WHERE ci.note LIKE '%(voice)%' 11 | AND ci.note LIKE '%(uncredited)%' 12 | AND cn.country_code = '[ru]' 13 | AND rt.role = 'actor' 14 | AND t.production_year > 2005 15 | AND t.id = mc.movie_id 16 | AND t.id = ci.movie_id 17 | AND ci.movie_id = mc.movie_id 18 | AND chn.id = ci.person_role_id 19 | AND rt.id = ci.role_id 20 | AND cn.id = mc.company_id 21 | AND ct.id = mc.company_type_id; 22 | 23 | -------------------------------------------------------------------------------- /resource/jobquery/10b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS character, 2 | MIN(t.title) AS russian_mov_with_actor_producer 3 | FROM char_name AS chn, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | company_type AS ct, 7 | movie_companies AS mc, 8 | role_type AS rt, 9 | title AS t 10 | WHERE ci.note LIKE '%(producer)%' 11 | AND cn.country_code = '[ru]' 12 | AND rt.role = 'actor' 13 | AND t.production_year > 2010 14 | AND t.id = mc.movie_id 15 | AND t.id = ci.movie_id 16 | AND ci.movie_id = mc.movie_id 17 | AND chn.id = ci.person_role_id 18 | AND rt.id = ci.role_id 19 | AND cn.id = mc.company_id 20 | AND ct.id = mc.company_type_id; 21 | 22 | -------------------------------------------------------------------------------- /resource/jobquery/10c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS character, 2 | MIN(t.title) AS movie_with_american_producer 3 | FROM char_name AS chn, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | company_type AS ct, 7 | movie_companies AS mc, 8 | role_type AS rt, 9 | title AS t 10 | WHERE ci.note LIKE '%(producer)%' 11 | AND cn.country_code = '[us]' 12 | AND t.production_year > 1990 13 | AND t.id = mc.movie_id 14 | AND t.id = ci.movie_id 15 | AND ci.movie_id = mc.movie_id 16 | AND chn.id = ci.person_role_id 17 | AND rt.id = ci.role_id 18 | AND cn.id = mc.company_id 19 | AND ct.id = mc.company_type_id; 20 | -------------------------------------------------------------------------------- /resource/jobquery/11a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS from_company, 2 | MIN(lt.link) AS movie_link_type, 3 | MIN(t.title) AS non_polish_sequel_movie 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | keyword AS k, 7 | link_type AS lt, 8 | movie_companies AS mc, 9 | movie_keyword AS mk, 10 | movie_link AS ml, 11 | title AS t 12 | WHERE cn.country_code !='[pl]' 13 | AND (cn.name LIKE '%Film%' 14 | OR cn.name LIKE '%Warner%') 15 | AND ct.kind ='production companies' 16 | AND k.keyword ='sequel' 17 | AND lt.link LIKE '%follow%' 18 | AND mc.note IS NULL 19 | AND t.production_year BETWEEN 1950 AND 2000 20 | AND lt.id = ml.link_type_id 21 | AND ml.movie_id = t.id 22 | AND t.id = mk.movie_id 23 | AND mk.keyword_id = k.id 24 | AND t.id = mc.movie_id 25 | AND mc.company_type_id = ct.id 26 | AND mc.company_id = cn.id 27 | AND ml.movie_id = mk.movie_id 28 | AND ml.movie_id = mc.movie_id 29 | AND mk.movie_id = mc.movie_id; 30 | 31 | -------------------------------------------------------------------------------- /resource/jobquery/11b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS from_company, 2 | MIN(lt.link) AS movie_link_type, 3 | MIN(t.title) AS sequel_movie 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | keyword AS k, 7 | link_type AS lt, 8 | movie_companies AS mc, 9 | movie_keyword AS mk, 10 | movie_link AS ml, 11 | title AS t 12 | WHERE cn.country_code !='[pl]' 13 | AND (cn.name LIKE '%Film%' 14 | OR cn.name LIKE '%Warner%') 15 | AND ct.kind ='production companies' 16 | AND k.keyword ='sequel' 17 | AND lt.link LIKE '%follows%' 18 | AND mc.note IS NULL 19 | AND t.production_year = 1998 20 | AND t.title LIKE '%Money%' 21 | AND lt.id = ml.link_type_id 22 | AND ml.movie_id = t.id 23 | AND t.id = mk.movie_id 24 | AND mk.keyword_id = k.id 25 | AND t.id = mc.movie_id 26 | AND mc.company_type_id = ct.id 27 | AND mc.company_id = cn.id 28 | AND ml.movie_id = mk.movie_id 29 | AND ml.movie_id = mc.movie_id 30 | AND mk.movie_id = mc.movie_id; 31 | 32 | -------------------------------------------------------------------------------- /resource/jobquery/11c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS from_company, 2 | MIN(mc.note) AS production_note, 3 | MIN(t.title) AS movie_based_on_book 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | keyword AS k, 7 | link_type AS lt, 8 | movie_companies AS mc, 9 | movie_keyword AS mk, 10 | movie_link AS ml, 11 | title AS t 12 | WHERE cn.country_code !='[pl]' 13 | AND (cn.name LIKE '20th Century Fox%' 14 | OR cn.name LIKE 'Twentieth Century Fox%') 15 | AND ct.kind != 'production companies' 16 | AND ct.kind IS NOT NULL 17 | AND k.keyword IN ('sequel', 18 | 'revenge', 19 | 'based-on-novel') 20 | AND mc.note IS NOT NULL 21 | AND t.production_year > 1950 22 | AND lt.id = ml.link_type_id 23 | AND ml.movie_id = t.id 24 | AND t.id = mk.movie_id 25 | AND mk.keyword_id = k.id 26 | AND t.id = mc.movie_id 27 | AND mc.company_type_id = ct.id 28 | AND mc.company_id = cn.id 29 | AND ml.movie_id = mk.movie_id 30 | AND ml.movie_id = mc.movie_id 31 | AND mk.movie_id = mc.movie_id; 32 | 33 | -------------------------------------------------------------------------------- /resource/jobquery/11d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS from_company, 2 | MIN(mc.note) AS production_note, 3 | MIN(t.title) AS movie_based_on_book 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | keyword AS k, 7 | link_type AS lt, 8 | movie_companies AS mc, 9 | movie_keyword AS mk, 10 | movie_link AS ml, 11 | title AS t 12 | WHERE cn.country_code !='[pl]' 13 | AND ct.kind != 'production companies' 14 | AND ct.kind IS NOT NULL 15 | AND k.keyword IN ('sequel', 16 | 'revenge', 17 | 'based-on-novel') 18 | AND mc.note IS NOT NULL 19 | AND t.production_year > 1950 20 | AND lt.id = ml.link_type_id 21 | AND ml.movie_id = t.id 22 | AND t.id = mk.movie_id 23 | AND mk.keyword_id = k.id 24 | AND t.id = mc.movie_id 25 | AND mc.company_type_id = ct.id 26 | AND mc.company_id = cn.id 27 | AND ml.movie_id = mk.movie_id 28 | AND ml.movie_id = mc.movie_id 29 | AND mk.movie_id = mc.movie_id; 30 | 31 | -------------------------------------------------------------------------------- /resource/jobquery/12a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS movie_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS drama_horror_movie 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it1, 7 | info_type AS it, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | movie_info_idx AS mi_idx, 11 | title AS t 12 | WHERE cn.country_code = '[us]' 13 | AND ct.kind = 'production companies' 14 | AND it1.info = 'genres' 15 | AND it.info = 'rating' 16 | AND mi.info IN ('Drama', 17 | 'Horror') 18 | AND mi_idx.info > '8.0' 19 | AND t.production_year BETWEEN 2005 AND 2008 20 | AND t.id = mi.movie_id 21 | AND t.id = mi_idx.movie_id 22 | AND mi.info_type_id = it1.id 23 | AND mi_idx.info_type_id = it.id 24 | AND t.id = mc.movie_id 25 | AND ct.id = mc.company_type_id 26 | AND cn.id = mc.company_id 27 | AND mc.movie_id = mi.movie_id 28 | AND mc.movie_id = mi_idx.movie_id 29 | AND mi.movie_id = mi_idx.movie_id; 30 | 31 | -------------------------------------------------------------------------------- /resource/jobquery/12b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS budget, 2 | MIN(t.title) AS unsuccsessful_movie 3 | FROM company_name AS cn, 4 | company_type AS ct, 5 | info_type AS it1, 6 | info_type AS it, 7 | movie_companies AS mc, 8 | movie_info AS mi, 9 | movie_info_idx AS mi_idx, 10 | title AS t 11 | WHERE cn.country_code ='[us]' 12 | AND ct.kind IS NOT NULL 13 | AND (ct.kind ='production companies' 14 | OR ct.kind = 'distributors') 15 | AND it1.info ='budget' 16 | AND it.info ='bottom 10 rank' 17 | AND t.production_year >2000 18 | AND (t.title LIKE 'Birdemic%' 19 | OR t.title LIKE '%Movie%') 20 | AND t.id = mi.movie_id 21 | AND t.id = mi_idx.movie_id 22 | AND mi.info_type_id = it1.id 23 | AND mi_idx.info_type_id = it.id 24 | AND t.id = mc.movie_id 25 | AND ct.id = mc.company_type_id 26 | AND cn.id = mc.company_id 27 | AND mc.movie_id = mi.movie_id 28 | AND mc.movie_id = mi_idx.movie_id 29 | AND mi.movie_id = mi_idx.movie_id; 30 | 31 | -------------------------------------------------------------------------------- /resource/jobquery/12c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS movie_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS mainstream_movie 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it1, 7 | info_type AS it, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | movie_info_idx AS mi_idx, 11 | title AS t 12 | WHERE cn.country_code = '[us]' 13 | AND ct.kind = 'production companies' 14 | AND it1.info = 'genres' 15 | AND it.info = 'rating' 16 | AND mi.info IN ('Drama', 17 | 'Horror', 18 | 'Western', 19 | 'Family') 20 | AND mi_idx.info > '7.0' 21 | AND t.production_year BETWEEN 2000 AND 2010 22 | AND t.id = mi.movie_id 23 | AND t.id = mi_idx.movie_id 24 | AND mi.info_type_id = it1.id 25 | AND mi_idx.info_type_id = it.id 26 | AND t.id = mc.movie_id 27 | AND ct.id = mc.company_type_id 28 | AND cn.id = mc.company_id 29 | AND mc.movie_id = mi.movie_id 30 | AND mc.movie_id = mi_idx.movie_id 31 | AND mi.movie_id = mi_idx.movie_id; 32 | 33 | -------------------------------------------------------------------------------- /resource/jobquery/13a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS release_date, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS german_movie 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it, 7 | info_type AS it1, 8 | kind_type AS kt, 9 | movie_companies AS mc, 10 | movie_info AS mi, 11 | movie_info_idx AS mi_idx, 12 | title AS t 13 | WHERE cn.country_code ='[de]' 14 | AND ct.kind ='production companies' 15 | AND it.info ='rating' 16 | AND it1.info ='release dates' 17 | AND kt.kind ='movie' 18 | AND mi.movie_id = t.id 19 | AND it1.id = mi.info_type_id 20 | AND kt.id = t.kind_id 21 | AND mc.movie_id = t.id 22 | AND cn.id = mc.company_id 23 | AND ct.id = mc.company_type_id 24 | AND mi_idx.movie_id = t.id 25 | AND it.id = mi_idx.info_type_id 26 | AND mi.movie_id = mi_idx.movie_id 27 | AND mi.movie_id = mc.movie_id 28 | AND mi_idx.movie_id = mc.movie_id; 29 | 30 | -------------------------------------------------------------------------------- /resource/jobquery/13b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS producing_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS movie_about_winning 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it, 7 | info_type AS it1, 8 | kind_type AS kt, 9 | movie_companies AS mc, 10 | movie_info AS mi, 11 | movie_info_idx AS mi_idx, 12 | title AS t 13 | WHERE cn.country_code ='[us]' 14 | AND ct.kind ='production companies' 15 | AND it.info ='rating' 16 | AND it1.info ='release dates' 17 | AND kt.kind ='movie' 18 | AND t.title != '' 19 | AND (t.title LIKE '%Champion%' 20 | OR t.title LIKE '%Loser%') 21 | AND mi.movie_id = t.id 22 | AND it1.id = mi.info_type_id 23 | AND kt.id = t.kind_id 24 | AND mc.movie_id = t.id 25 | AND cn.id = mc.company_id 26 | AND ct.id = mc.company_type_id 27 | AND mi_idx.movie_id = t.id 28 | AND it.id = mi_idx.info_type_id 29 | AND mi.movie_id = mi_idx.movie_id 30 | AND mi.movie_id = mc.movie_id 31 | AND mi_idx.movie_id = mc.movie_id; 32 | 33 | -------------------------------------------------------------------------------- /resource/jobquery/13c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS producing_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS movie_about_winning 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it, 7 | info_type AS it1, 8 | kind_type AS kt, 9 | movie_companies AS mc, 10 | movie_info AS mi, 11 | movie_info_idx AS mi_idx, 12 | title AS t 13 | WHERE cn.country_code ='[us]' 14 | AND ct.kind ='production companies' 15 | AND it.info ='rating' 16 | AND it1.info ='release dates' 17 | AND kt.kind ='movie' 18 | AND t.title != '' 19 | AND (t.title LIKE 'Champion%' 20 | OR t.title LIKE 'Loser%') 21 | AND mi.movie_id = t.id 22 | AND it1.id = mi.info_type_id 23 | AND kt.id = t.kind_id 24 | AND mc.movie_id = t.id 25 | AND cn.id = mc.company_id 26 | AND ct.id = mc.company_type_id 27 | AND mi_idx.movie_id = t.id 28 | AND it.id = mi_idx.info_type_id 29 | AND mi.movie_id = mi_idx.movie_id 30 | AND mi.movie_id = mc.movie_id 31 | AND mi_idx.movie_id = mc.movie_id; 32 | 33 | -------------------------------------------------------------------------------- /resource/jobquery/13d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS producing_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS movie 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it, 7 | info_type AS it1, 8 | kind_type AS kt, 9 | movie_companies AS mc, 10 | movie_info AS mi, 11 | movie_info_idx AS mi_idx, 12 | title AS t 13 | WHERE cn.country_code ='[us]' 14 | AND ct.kind ='production companies' 15 | AND it.info ='rating' 16 | AND it1.info ='release dates' 17 | AND kt.kind ='movie' 18 | AND mi.movie_id = t.id 19 | AND it1.id = mi.info_type_id 20 | AND kt.id = t.kind_id 21 | AND mc.movie_id = t.id 22 | AND cn.id = mc.company_id 23 | AND ct.id = mc.company_type_id 24 | AND mi_idx.movie_id = t.id 25 | AND it.id = mi_idx.info_type_id 26 | AND mi.movie_id = mi_idx.movie_id 27 | AND mi.movie_id = mc.movie_id 28 | AND mi_idx.movie_id = mc.movie_id; 29 | 30 | -------------------------------------------------------------------------------- /resource/jobquery/14a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi_idx.info) AS rating, 2 | MIN(t.title) AS northern_dark_movie 3 | FROM info_type AS it1, 4 | info_type AS it, 5 | keyword AS k, 6 | kind_type AS kt, 7 | movie_info AS mi, 8 | movie_info_idx AS mi_idx, 9 | movie_keyword AS mk, 10 | title AS t 11 | WHERE it1.info = 'countries' 12 | AND it.info = 'rating' 13 | AND k.keyword IN ('murder', 14 | 'murder-in-title', 15 | 'blood', 16 | 'violence') 17 | AND kt.kind = 'movie' 18 | AND mi.info IN ('Sweden', 19 | 'Norway', 20 | 'Germany', 21 | 'Denmark', 22 | 'Swedish', 23 | 'Denish', 24 | 'Norwegian', 25 | 'German', 26 | 'USA', 27 | 'American') 28 | AND mi_idx.info < '8.5' 29 | AND t.production_year > 2010 30 | AND kt.id = t.kind_id 31 | AND t.id = mi.movie_id 32 | AND t.id = mk.movie_id 33 | AND t.id = mi_idx.movie_id 34 | AND mk.movie_id = mi.movie_id 35 | AND mk.movie_id = mi_idx.movie_id 36 | AND mi.movie_id = mi_idx.movie_id 37 | AND k.id = mk.keyword_id 38 | AND it1.id = mi.info_type_id 39 | AND it.id = mi_idx.info_type_id; 40 | 41 | -------------------------------------------------------------------------------- /resource/jobquery/14b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi_idx.info) AS rating, 2 | MIN(t.title) AS western_dark_production 3 | FROM info_type AS it1, 4 | info_type AS it, 5 | keyword AS k, 6 | kind_type AS kt, 7 | movie_info AS mi, 8 | movie_info_idx AS mi_idx, 9 | movie_keyword AS mk, 10 | title AS t 11 | WHERE it1.info = 'countries' 12 | AND it.info = 'rating' 13 | AND k.keyword IN ('murder', 14 | 'murder-in-title') 15 | AND kt.kind = 'movie' 16 | AND mi.info IN ('Sweden', 17 | 'Norway', 18 | 'Germany', 19 | 'Denmark', 20 | 'Swedish', 21 | 'Denish', 22 | 'Norwegian', 23 | 'German', 24 | 'USA', 25 | 'American') 26 | AND mi_idx.info > '6.0' 27 | AND t.production_year > 2010 28 | AND (t.title LIKE '%murder%' 29 | OR t.title LIKE '%Murder%' 30 | OR t.title LIKE '%Mord%') 31 | AND kt.id = t.kind_id 32 | AND t.id = mi.movie_id 33 | AND t.id = mk.movie_id 34 | AND t.id = mi_idx.movie_id 35 | AND mk.movie_id = mi.movie_id 36 | AND mk.movie_id = mi_idx.movie_id 37 | AND mi.movie_id = mi_idx.movie_id 38 | AND k.id = mk.keyword_id 39 | AND it1.id = mi.info_type_id 40 | AND it.id = mi_idx.info_type_id; 41 | 42 | -------------------------------------------------------------------------------- /resource/jobquery/14c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi_idx.info) AS rating, 2 | MIN(t.title) AS north_european_dark_production 3 | FROM info_type AS it1, 4 | info_type AS it, 5 | keyword AS k, 6 | kind_type AS kt, 7 | movie_info AS mi, 8 | movie_info_idx AS mi_idx, 9 | movie_keyword AS mk, 10 | title AS t 11 | WHERE it1.info = 'countries' 12 | AND it.info = 'rating' 13 | AND k.keyword IS NOT NULL 14 | AND k.keyword IN ('murder', 15 | 'murder-in-title', 16 | 'blood', 17 | 'violence') 18 | AND kt.kind IN ('movie', 19 | 'episode') 20 | AND mi.info IN ('Sweden', 21 | 'Norway', 22 | 'Germany', 23 | 'Denmark', 24 | 'Swedish', 25 | 'Danish', 26 | 'Norwegian', 27 | 'German', 28 | 'USA', 29 | 'American') 30 | AND mi_idx.info < '8.5' 31 | AND t.production_year > 2005 32 | AND kt.id = t.kind_id 33 | AND t.id = mi.movie_id 34 | AND t.id = mk.movie_id 35 | AND t.id = mi_idx.movie_id 36 | AND mk.movie_id = mi.movie_id 37 | AND mk.movie_id = mi_idx.movie_id 38 | AND mi.movie_id = mi_idx.movie_id 39 | AND k.id = mk.keyword_id 40 | AND it1.id = mi.info_type_id 41 | AND it.id = mi_idx.info_type_id; 42 | 43 | -------------------------------------------------------------------------------- /resource/jobquery/15a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS release_date, 2 | MIN(t.title) AS internet_movie 3 | FROM aka_title AS AT, 4 | company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it1, 7 | keyword AS k, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | movie_keyword AS mk, 11 | title AS t 12 | WHERE cn.country_code = '[us]' 13 | AND it1.info = 'release dates' 14 | AND mc.note LIKE '%(200%)%' 15 | AND mc.note LIKE '%(worldwide)%' 16 | AND mi.note LIKE '%internet%' 17 | AND mi.info LIKE 'USA:% 200%' 18 | AND t.production_year > 2000 19 | AND t.id = at.movie_id 20 | AND t.id = mi.movie_id 21 | AND t.id = mk.movie_id 22 | AND t.id = mc.movie_id 23 | AND mk.movie_id = mi.movie_id 24 | AND mk.movie_id = mc.movie_id 25 | AND mk.movie_id = at.movie_id 26 | AND mi.movie_id = mc.movie_id 27 | AND mi.movie_id = at.movie_id 28 | AND mc.movie_id = at.movie_id 29 | AND k.id = mk.keyword_id 30 | AND it1.id = mi.info_type_id 31 | AND cn.id = mc.company_id 32 | AND ct.id = mc.company_type_id; 33 | 34 | -------------------------------------------------------------------------------- /resource/jobquery/15b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS release_date, 2 | MIN(t.title) AS youtube_movie 3 | FROM aka_title AS AT, 4 | company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it1, 7 | keyword AS k, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | movie_keyword AS mk, 11 | title AS t 12 | WHERE cn.country_code = '[us]' 13 | AND cn.name = 'YouTube' 14 | AND it1.info = 'release dates' 15 | AND mc.note LIKE '%(200%)%' 16 | AND mc.note LIKE '%(worldwide)%' 17 | AND mi.note LIKE '%internet%' 18 | AND mi.info LIKE 'USA:% 200%' 19 | AND t.production_year BETWEEN 2005 AND 2010 20 | AND t.id = at.movie_id 21 | AND t.id = mi.movie_id 22 | AND t.id = mk.movie_id 23 | AND t.id = mc.movie_id 24 | AND mk.movie_id = mi.movie_id 25 | AND mk.movie_id = mc.movie_id 26 | AND mk.movie_id = at.movie_id 27 | AND mi.movie_id = mc.movie_id 28 | AND mi.movie_id = at.movie_id 29 | AND mc.movie_id = at.movie_id 30 | AND k.id = mk.keyword_id 31 | AND it1.id = mi.info_type_id 32 | AND cn.id = mc.company_id 33 | AND ct.id = mc.company_type_id; 34 | 35 | -------------------------------------------------------------------------------- /resource/jobquery/15c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS release_date, 2 | MIN(t.title) AS modern_american_internet_movie 3 | FROM aka_title AS AT, 4 | company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it1, 7 | keyword AS k, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | movie_keyword AS mk, 11 | title AS t 12 | WHERE cn.country_code = '[us]' 13 | AND it1.info = 'release dates' 14 | AND mi.note LIKE '%internet%' 15 | AND mi.info IS NOT NULL 16 | AND (mi.info LIKE 'USA:% 199%' 17 | OR mi.info LIKE 'USA:% 200%') 18 | AND t.production_year > 1990 19 | AND t.id = at.movie_id 20 | AND t.id = mi.movie_id 21 | AND t.id = mk.movie_id 22 | AND t.id = mc.movie_id 23 | AND mk.movie_id = mi.movie_id 24 | AND mk.movie_id = mc.movie_id 25 | AND mk.movie_id = at.movie_id 26 | AND mi.movie_id = mc.movie_id 27 | AND mi.movie_id = at.movie_id 28 | AND mc.movie_id = at.movie_id 29 | AND k.id = mk.keyword_id 30 | AND it1.id = mi.info_type_id 31 | AND cn.id = mc.company_id 32 | AND ct.id = mc.company_type_id; 33 | 34 | -------------------------------------------------------------------------------- /resource/jobquery/15d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(at.title) AS aka_title, 2 | MIN(t.title) AS internet_movie_title 3 | FROM aka_title AS AT, 4 | company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it1, 7 | keyword AS k, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | movie_keyword AS mk, 11 | title AS t 12 | WHERE cn.country_code = '[us]' 13 | AND it1.info = 'release dates' 14 | AND mi.note LIKE '%internet%' 15 | AND t.production_year > 1990 16 | AND t.id = at.movie_id 17 | AND t.id = mi.movie_id 18 | AND t.id = mk.movie_id 19 | AND t.id = mc.movie_id 20 | AND mk.movie_id = mi.movie_id 21 | AND mk.movie_id = mc.movie_id 22 | AND mk.movie_id = at.movie_id 23 | AND mi.movie_id = mc.movie_id 24 | AND mi.movie_id = at.movie_id 25 | AND mc.movie_id = at.movie_id 26 | AND k.id = mk.keyword_id 27 | AND it1.id = mi.info_type_id 28 | AND cn.id = mc.company_id 29 | AND ct.id = mc.company_type_id; 30 | 31 | -------------------------------------------------------------------------------- /resource/jobquery/16a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS cool_actor_pseudonym, 2 | MIN(t.title) AS series_named_after_char 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | keyword AS k, 7 | movie_companies AS mc, 8 | movie_keyword AS mk, 9 | name AS n, 10 | title AS t 11 | WHERE cn.country_code ='[us]' 12 | AND k.keyword ='character-name-in-title' 13 | AND t.episode_nr >= 50 14 | AND t.episode_nr < 100 15 | AND an.person_id = n.id 16 | AND n.id = ci.person_id 17 | AND ci.movie_id = t.id 18 | AND t.id = mk.movie_id 19 | AND mk.keyword_id = k.id 20 | AND t.id = mc.movie_id 21 | AND mc.company_id = cn.id 22 | AND an.person_id = ci.person_id 23 | AND ci.movie_id = mc.movie_id 24 | AND ci.movie_id = mk.movie_id 25 | AND mc.movie_id = mk.movie_id; 26 | 27 | -------------------------------------------------------------------------------- /resource/jobquery/16b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS cool_actor_pseudonym, 2 | MIN(t.title) AS series_named_after_char 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | keyword AS k, 7 | movie_companies AS mc, 8 | movie_keyword AS mk, 9 | name AS n, 10 | title AS t 11 | WHERE cn.country_code ='[us]' 12 | AND k.keyword ='character-name-in-title' 13 | AND an.person_id = n.id 14 | AND n.id = ci.person_id 15 | AND ci.movie_id = t.id 16 | AND t.id = mk.movie_id 17 | AND mk.keyword_id = k.id 18 | AND t.id = mc.movie_id 19 | AND mc.company_id = cn.id 20 | AND an.person_id = ci.person_id 21 | AND ci.movie_id = mc.movie_id 22 | AND ci.movie_id = mk.movie_id 23 | AND mc.movie_id = mk.movie_id; 24 | 25 | -------------------------------------------------------------------------------- /resource/jobquery/16c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS cool_actor_pseudonym, 2 | MIN(t.title) AS series_named_after_char 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | keyword AS k, 7 | movie_companies AS mc, 8 | movie_keyword AS mk, 9 | name AS n, 10 | title AS t 11 | WHERE cn.country_code ='[us]' 12 | AND k.keyword ='character-name-in-title' 13 | AND t.episode_nr < 100 14 | AND an.person_id = n.id 15 | AND n.id = ci.person_id 16 | AND ci.movie_id = t.id 17 | AND t.id = mk.movie_id 18 | AND mk.keyword_id = k.id 19 | AND t.id = mc.movie_id 20 | AND mc.company_id = cn.id 21 | AND an.person_id = ci.person_id 22 | AND ci.movie_id = mc.movie_id 23 | AND ci.movie_id = mk.movie_id 24 | AND mc.movie_id = mk.movie_id; 25 | 26 | -------------------------------------------------------------------------------- /resource/jobquery/16d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS cool_actor_pseudonym, 2 | MIN(t.title) AS series_named_after_char 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | keyword AS k, 7 | movie_companies AS mc, 8 | movie_keyword AS mk, 9 | name AS n, 10 | title AS t 11 | WHERE cn.country_code ='[us]' 12 | AND k.keyword ='character-name-in-title' 13 | AND t.episode_nr >= 5 14 | AND t.episode_nr < 100 15 | AND an.person_id = n.id 16 | AND n.id = ci.person_id 17 | AND ci.movie_id = t.id 18 | AND t.id = mk.movie_id 19 | AND mk.keyword_id = k.id 20 | AND t.id = mc.movie_id 21 | AND mc.company_id = cn.id 22 | AND an.person_id = ci.person_id 23 | AND ci.movie_id = mc.movie_id 24 | AND ci.movie_id = mk.movie_id 25 | AND mc.movie_id = mk.movie_id; 26 | 27 | -------------------------------------------------------------------------------- /resource/jobquery/17a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS member_in_charnamed_american_movie, 2 | MIN(n.name) AS a1 3 | FROM cast_info AS ci, 4 | company_name AS cn, 5 | keyword AS k, 6 | movie_companies AS mc, 7 | movie_keyword AS mk, 8 | name AS n, 9 | title AS t 10 | WHERE cn.country_code ='[us]' 11 | AND k.keyword ='character-name-in-title' 12 | AND n.name LIKE 'B%' 13 | AND n.id = ci.person_id 14 | AND ci.movie_id = t.id 15 | AND t.id = mk.movie_id 16 | AND mk.keyword_id = k.id 17 | AND t.id = mc.movie_id 18 | AND mc.company_id = cn.id 19 | AND ci.movie_id = mc.movie_id 20 | AND ci.movie_id = mk.movie_id 21 | AND mc.movie_id = mk.movie_id; 22 | 23 | -------------------------------------------------------------------------------- /resource/jobquery/17b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS member_in_charnamed_movie, 2 | MIN(n.name) AS a1 3 | FROM cast_info AS ci, 4 | company_name AS cn, 5 | keyword AS k, 6 | movie_companies AS mc, 7 | movie_keyword AS mk, 8 | name AS n, 9 | title AS t 10 | WHERE k.keyword ='character-name-in-title' 11 | AND n.name LIKE 'Z%' 12 | AND n.id = ci.person_id 13 | AND ci.movie_id = t.id 14 | AND t.id = mk.movie_id 15 | AND mk.keyword_id = k.id 16 | AND t.id = mc.movie_id 17 | AND mc.company_id = cn.id 18 | AND ci.movie_id = mc.movie_id 19 | AND ci.movie_id = mk.movie_id 20 | AND mc.movie_id = mk.movie_id; 21 | 22 | -------------------------------------------------------------------------------- /resource/jobquery/17c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS member_in_charnamed_movie, 2 | MIN(n.name) AS a1 3 | FROM cast_info AS ci, 4 | company_name AS cn, 5 | keyword AS k, 6 | movie_companies AS mc, 7 | movie_keyword AS mk, 8 | name AS n, 9 | title AS t 10 | WHERE k.keyword ='character-name-in-title' 11 | AND n.name LIKE 'X%' 12 | AND n.id = ci.person_id 13 | AND ci.movie_id = t.id 14 | AND t.id = mk.movie_id 15 | AND mk.keyword_id = k.id 16 | AND t.id = mc.movie_id 17 | AND mc.company_id = cn.id 18 | AND ci.movie_id = mc.movie_id 19 | AND ci.movie_id = mk.movie_id 20 | AND mc.movie_id = mk.movie_id; 21 | 22 | -------------------------------------------------------------------------------- /resource/jobquery/17d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS member_in_charnamed_movie 2 | FROM cast_info AS ci, 3 | company_name AS cn, 4 | keyword AS k, 5 | movie_companies AS mc, 6 | movie_keyword AS mk, 7 | name AS n, 8 | title AS t 9 | WHERE k.keyword ='character-name-in-title' 10 | AND n.name LIKE '%Bert%' 11 | AND n.id = ci.person_id 12 | AND ci.movie_id = t.id 13 | AND t.id = mk.movie_id 14 | AND mk.keyword_id = k.id 15 | AND t.id = mc.movie_id 16 | AND mc.company_id = cn.id 17 | AND ci.movie_id = mc.movie_id 18 | AND ci.movie_id = mk.movie_id 19 | AND mc.movie_id = mk.movie_id; 20 | 21 | -------------------------------------------------------------------------------- /resource/jobquery/17e.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS member_in_charnamed_movie 2 | FROM cast_info AS ci, 3 | company_name AS cn, 4 | keyword AS k, 5 | movie_companies AS mc, 6 | movie_keyword AS mk, 7 | name AS n, 8 | title AS t 9 | WHERE cn.country_code ='[us]' 10 | AND k.keyword ='character-name-in-title' 11 | AND n.id = ci.person_id 12 | AND ci.movie_id = t.id 13 | AND t.id = mk.movie_id 14 | AND mk.keyword_id = k.id 15 | AND t.id = mc.movie_id 16 | AND mc.company_id = cn.id 17 | AND ci.movie_id = mc.movie_id 18 | AND ci.movie_id = mk.movie_id 19 | AND mc.movie_id = mk.movie_id; 20 | 21 | -------------------------------------------------------------------------------- /resource/jobquery/17f.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS member_in_charnamed_movie 2 | FROM cast_info AS ci, 3 | company_name AS cn, 4 | keyword AS k, 5 | movie_companies AS mc, 6 | movie_keyword AS mk, 7 | name AS n, 8 | title AS t 9 | WHERE k.keyword ='character-name-in-title' 10 | AND n.name LIKE '%B%' 11 | AND n.id = ci.person_id 12 | AND ci.movie_id = t.id 13 | AND t.id = mk.movie_id 14 | AND mk.keyword_id = k.id 15 | AND t.id = mc.movie_id 16 | AND mc.company_id = cn.id 17 | AND ci.movie_id = mc.movie_id 18 | AND ci.movie_id = mk.movie_id 19 | AND mc.movie_id = mk.movie_id; 20 | 21 | -------------------------------------------------------------------------------- /resource/jobquery/18a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(t.title) AS movie_title 4 | FROM cast_info AS ci, 5 | info_type AS it1, 6 | info_type AS it, 7 | movie_info AS mi, 8 | movie_info_idx AS mi_idx, 9 | name AS n, 10 | title AS t 11 | WHERE ci.note IN ('(producer)', 12 | '(executive producer)') 13 | AND it1.info = 'budget' 14 | AND it.info = 'votes' 15 | AND n.gender = 'm' 16 | AND n.name LIKE '%Tim%' 17 | AND t.id = mi.movie_id 18 | AND t.id = mi_idx.movie_id 19 | AND t.id = ci.movie_id 20 | AND ci.movie_id = mi.movie_id 21 | AND ci.movie_id = mi_idx.movie_id 22 | AND mi.movie_id = mi_idx.movie_id 23 | AND n.id = ci.person_id 24 | AND it1.id = mi.info_type_id 25 | AND it.id = mi_idx.info_type_id; 26 | 27 | -------------------------------------------------------------------------------- /resource/jobquery/18b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(t.title) AS movie_title 4 | FROM cast_info AS ci, 5 | info_type AS it1, 6 | info_type AS it, 7 | movie_info AS mi, 8 | movie_info_idx AS mi_idx, 9 | name AS n, 10 | title AS t 11 | WHERE ci.note IN ('(writer)', 12 | '(head writer)', 13 | '(written by)', 14 | '(story)', 15 | '(story editor)') 16 | AND it1.info = 'genres' 17 | AND it.info = 'rating' 18 | AND mi.info IN ('Horror', 19 | 'Thriller') 20 | AND mi.note IS NULL 21 | AND mi_idx.info > '8.0' 22 | AND n.gender IS NOT NULL 23 | AND n.gender = 'f' 24 | AND t.production_year BETWEEN 2008 AND 2014 25 | AND t.id = mi.movie_id 26 | AND t.id = mi_idx.movie_id 27 | AND t.id = ci.movie_id 28 | AND ci.movie_id = mi.movie_id 29 | AND ci.movie_id = mi_idx.movie_id 30 | AND mi.movie_id = mi_idx.movie_id 31 | AND n.id = ci.person_id 32 | AND it1.id = mi.info_type_id 33 | AND it.id = mi_idx.info_type_id; 34 | 35 | -------------------------------------------------------------------------------- /resource/jobquery/18c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(t.title) AS movie_title 4 | FROM cast_info AS ci, 5 | info_type AS it1, 6 | info_type AS it, 7 | movie_info AS mi, 8 | movie_info_idx AS mi_idx, 9 | name AS n, 10 | title AS t 11 | WHERE ci.note IN ('(writer)', 12 | '(head writer)', 13 | '(written by)', 14 | '(story)', 15 | '(story editor)') 16 | AND it1.info = 'genres' 17 | AND it.info = 'votes' 18 | AND mi.info IN ('Horror', 19 | 'Action', 20 | 'Sci-Fi', 21 | 'Thriller', 22 | 'Crime', 23 | 'War') 24 | AND n.gender = 'm' 25 | AND t.id = mi.movie_id 26 | AND t.id = mi_idx.movie_id 27 | AND t.id = ci.movie_id 28 | AND ci.movie_id = mi.movie_id 29 | AND ci.movie_id = mi_idx.movie_id 30 | AND mi.movie_id = mi_idx.movie_id 31 | AND n.id = ci.person_id 32 | AND it1.id = mi.info_type_id 33 | AND it.id = mi_idx.info_type_id; 34 | 35 | -------------------------------------------------------------------------------- /resource/jobquery/19a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS voicing_actress, 2 | MIN(t.title) AS voiced_movie 3 | FROM aka_name AS an, 4 | char_name AS chn, 5 | cast_info AS ci, 6 | company_name AS cn, 7 | info_type AS it, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | name AS n, 11 | role_type AS rt, 12 | title AS t 13 | WHERE ci.note IN ('(voice)', 14 | '(voice: Japanese version)', 15 | '(voice) (uncredited)', 16 | '(voice: English version)') 17 | AND cn.country_code ='[us]' 18 | AND it.info = 'release dates' 19 | AND mc.note IS NOT NULL 20 | AND (mc.note LIKE '%(USA)%' 21 | OR mc.note LIKE '%(worldwide)%') 22 | AND mi.info IS NOT NULL 23 | AND (mi.info LIKE 'Japan:%200%' 24 | OR mi.info LIKE 'USA:%200%') 25 | AND n.gender ='f' 26 | AND n.name LIKE '%Ang%' 27 | AND rt.role ='actress' 28 | AND t.production_year BETWEEN 2005 AND 2009 29 | AND t.id = mi.movie_id 30 | AND t.id = mc.movie_id 31 | AND t.id = ci.movie_id 32 | AND mc.movie_id = ci.movie_id 33 | AND mc.movie_id = mi.movie_id 34 | AND mi.movie_id = ci.movie_id 35 | AND cn.id = mc.company_id 36 | AND it.id = mi.info_type_id 37 | AND n.id = ci.person_id 38 | AND rt.id = ci.role_id 39 | AND n.id = an.person_id 40 | AND ci.person_id = an.person_id 41 | AND chn.id = ci.person_role_id; 42 | 43 | -------------------------------------------------------------------------------- /resource/jobquery/19b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS voicing_actress, 2 | MIN(t.title) AS kung_fu_panda 3 | FROM aka_name AS an, 4 | char_name AS chn, 5 | cast_info AS ci, 6 | company_name AS cn, 7 | info_type AS it, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | name AS n, 11 | role_type AS rt, 12 | title AS t 13 | WHERE ci.note = '(voice)' 14 | AND cn.country_code ='[us]' 15 | AND it.info = 'release dates' 16 | AND mc.note LIKE '%(200%)%' 17 | AND (mc.note LIKE '%(USA)%' 18 | OR mc.note LIKE '%(worldwide)%') 19 | AND mi.info IS NOT NULL 20 | AND (mi.info LIKE 'Japan:%2007%' 21 | OR mi.info LIKE 'USA:%2008%') 22 | AND n.gender ='f' 23 | AND n.name LIKE '%Angel%' 24 | AND rt.role ='actress' 25 | AND t.production_year BETWEEN 2007 AND 2008 26 | AND t.title LIKE '%Kung%Fu%Panda%' 27 | AND t.id = mi.movie_id 28 | AND t.id = mc.movie_id 29 | AND t.id = ci.movie_id 30 | AND mc.movie_id = ci.movie_id 31 | AND mc.movie_id = mi.movie_id 32 | AND mi.movie_id = ci.movie_id 33 | AND cn.id = mc.company_id 34 | AND it.id = mi.info_type_id 35 | AND n.id = ci.person_id 36 | AND rt.id = ci.role_id 37 | AND n.id = an.person_id 38 | AND ci.person_id = an.person_id 39 | AND chn.id = ci.person_role_id; 40 | 41 | -------------------------------------------------------------------------------- /resource/jobquery/19c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS voicing_actress, 2 | MIN(t.title) AS jap_engl_voiced_movie 3 | FROM aka_name AS an, 4 | char_name AS chn, 5 | cast_info AS ci, 6 | company_name AS cn, 7 | info_type AS it, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | name AS n, 11 | role_type AS rt, 12 | title AS t 13 | WHERE ci.note IN ('(voice)', 14 | '(voice: Japanese version)', 15 | '(voice) (uncredited)', 16 | '(voice: English version)') 17 | AND cn.country_code ='[us]' 18 | AND it.info = 'release dates' 19 | AND mi.info IS NOT NULL 20 | AND (mi.info LIKE 'Japan:%200%' 21 | OR mi.info LIKE 'USA:%200%') 22 | AND n.gender ='f' 23 | AND n.name LIKE '%An%' 24 | AND rt.role ='actress' 25 | AND t.production_year > 2000 26 | AND t.id = mi.movie_id 27 | AND t.id = mc.movie_id 28 | AND t.id = ci.movie_id 29 | AND mc.movie_id = ci.movie_id 30 | AND mc.movie_id = mi.movie_id 31 | AND mi.movie_id = ci.movie_id 32 | AND cn.id = mc.company_id 33 | AND it.id = mi.info_type_id 34 | AND n.id = ci.person_id 35 | AND rt.id = ci.role_id 36 | AND n.id = an.person_id 37 | AND ci.person_id = an.person_id 38 | AND chn.id = ci.person_role_id; 39 | 40 | -------------------------------------------------------------------------------- /resource/jobquery/19d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS voicing_actress, 2 | MIN(t.title) AS jap_engl_voiced_movie 3 | FROM aka_name AS an, 4 | char_name AS chn, 5 | cast_info AS ci, 6 | company_name AS cn, 7 | info_type AS it, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | name AS n, 11 | role_type AS rt, 12 | title AS t 13 | WHERE ci.note IN ('(voice)', 14 | '(voice: Japanese version)', 15 | '(voice) (uncredited)', 16 | '(voice: English version)') 17 | AND cn.country_code ='[us]' 18 | AND it.info = 'release dates' 19 | AND n.gender ='f' 20 | AND rt.role ='actress' 21 | AND t.production_year > 2000 22 | AND t.id = mi.movie_id 23 | AND t.id = mc.movie_id 24 | AND t.id = ci.movie_id 25 | AND mc.movie_id = ci.movie_id 26 | AND mc.movie_id = mi.movie_id 27 | AND mi.movie_id = ci.movie_id 28 | AND cn.id = mc.company_id 29 | AND it.id = mi.info_type_id 30 | AND n.id = ci.person_id 31 | AND rt.id = ci.role_id 32 | AND n.id = an.person_id 33 | AND ci.person_id = an.person_id 34 | AND chn.id = ci.person_role_id; 35 | 36 | -------------------------------------------------------------------------------- /resource/jobquery/1a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mc.note) AS production_note, 2 | MIN(t.title) AS movie_title, 3 | MIN(t.production_year) AS movie_year 4 | FROM company_type AS ct, 5 | info_type AS it, 6 | movie_companies AS mc, 7 | movie_info_idx AS mi_idx, 8 | title AS t 9 | WHERE ct.kind = 'production companies' 10 | AND it.info = 'top 250 rank' 11 | AND mc.note NOT LIKE '%(as Metro-Goldwyn-Mayer Pictures)%' 12 | AND (mc.note LIKE '%(co-production)%' 13 | OR mc.note LIKE '%(presents)%') 14 | AND ct.id = mc.company_type_id 15 | AND t.id = mc.movie_id 16 | AND t.id = mi_idx.movie_id 17 | AND mc.movie_id = mi_idx.movie_id 18 | AND it.id = mi_idx.info_type_id; 19 | 20 | -------------------------------------------------------------------------------- /resource/jobquery/1b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mc.note) AS production_note, 2 | MIN(t.title) AS movie_title, 3 | MIN(t.production_year) AS movie_year 4 | FROM company_type AS ct, 5 | info_type AS it, 6 | movie_companies AS mc, 7 | movie_info_idx AS mi_idx, 8 | title AS t 9 | WHERE ct.kind = 'production companies' 10 | AND it.info = 'bottom 10 rank' 11 | AND mc.note NOT LIKE '%(as Metro-Goldwyn-Mayer Pictures)%' 12 | AND t.production_year BETWEEN 2005 AND 2010 13 | AND ct.id = mc.company_type_id 14 | AND t.id = mc.movie_id 15 | AND t.id = mi_idx.movie_id 16 | AND mc.movie_id = mi_idx.movie_id 17 | AND it.id = mi_idx.info_type_id; 18 | 19 | -------------------------------------------------------------------------------- /resource/jobquery/1c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mc.note) AS production_note, 2 | MIN(t.title) AS movie_title, 3 | MIN(t.production_year) AS movie_year 4 | FROM company_type AS ct, 5 | info_type AS it, 6 | movie_companies AS mc, 7 | movie_info_idx AS mi_idx, 8 | title AS t 9 | WHERE ct.kind = 'production companies' 10 | AND it.info = 'top 250 rank' 11 | AND mc.note NOT LIKE '%(as Metro-Goldwyn-Mayer Pictures)%' 12 | AND (mc.note LIKE '%(co-production)%') 13 | AND t.production_year >2010 14 | AND ct.id = mc.company_type_id 15 | AND t.id = mc.movie_id 16 | AND t.id = mi_idx.movie_id 17 | AND mc.movie_id = mi_idx.movie_id 18 | AND it.id = mi_idx.info_type_id; 19 | 20 | -------------------------------------------------------------------------------- /resource/jobquery/1d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mc.note) AS production_note, 2 | MIN(t.title) AS movie_title, 3 | MIN(t.production_year) AS movie_year 4 | FROM company_type AS ct, 5 | info_type AS it, 6 | movie_companies AS mc, 7 | movie_info_idx AS mi_idx, 8 | title AS t 9 | WHERE ct.kind = 'production companies' 10 | AND it.info = 'bottom 10 rank' 11 | AND mc.note NOT LIKE '%(as Metro-Goldwyn-Mayer Pictures)%' 12 | AND t.production_year >2000 13 | AND ct.id = mc.company_type_id 14 | AND t.id = mc.movie_id 15 | AND t.id = mi_idx.movie_id 16 | AND mc.movie_id = mi_idx.movie_id 17 | AND it.id = mi_idx.info_type_id; 18 | 19 | -------------------------------------------------------------------------------- /resource/jobquery/20a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS complete_downey_ironman_movie 2 | FROM complete_cast AS cc, 3 | comp_cast_type AS cct1, 4 | comp_cast_type AS cct2, 5 | char_name AS chn, 6 | cast_info AS ci, 7 | keyword AS k, 8 | kind_type AS kt, 9 | movie_keyword AS mk, 10 | name AS n, 11 | title AS t 12 | WHERE cct1.kind = 'cast' 13 | AND cct2.kind LIKE '%complete%' 14 | AND chn.name NOT LIKE '%Sherlock%' 15 | AND (chn.name LIKE '%Tony%Stark%' 16 | OR chn.name LIKE '%Iron%Man%') 17 | AND k.keyword IN ('superhero', 18 | 'sequel', 19 | 'second-part', 20 | 'marvel-comics', 21 | 'based-on-comic', 22 | 'tv-special', 23 | 'fight', 24 | 'violence') 25 | AND kt.kind = 'movie' 26 | AND t.production_year > 1950 27 | AND kt.id = t.kind_id 28 | AND t.id = mk.movie_id 29 | AND t.id = ci.movie_id 30 | AND t.id = cc.movie_id 31 | AND mk.movie_id = ci.movie_id 32 | AND mk.movie_id = cc.movie_id 33 | AND ci.movie_id = cc.movie_id 34 | AND chn.id = ci.person_role_id 35 | AND n.id = ci.person_id 36 | AND k.id = mk.keyword_id 37 | AND cct1.id = cc.subject_id 38 | AND cct2.id = cc.status_id; 39 | 40 | -------------------------------------------------------------------------------- /resource/jobquery/20b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS complete_downey_ironman_movie 2 | FROM complete_cast AS cc, 3 | comp_cast_type AS cct1, 4 | comp_cast_type AS cct2, 5 | char_name AS chn, 6 | cast_info AS ci, 7 | keyword AS k, 8 | kind_type AS kt, 9 | movie_keyword AS mk, 10 | name AS n, 11 | title AS t 12 | WHERE cct1.kind = 'cast' 13 | AND cct2.kind LIKE '%complete%' 14 | AND chn.name NOT LIKE '%Sherlock%' 15 | AND (chn.name LIKE '%Tony%Stark%' 16 | OR chn.name LIKE '%Iron%Man%') 17 | AND k.keyword IN ('superhero', 18 | 'sequel', 19 | 'second-part', 20 | 'marvel-comics', 21 | 'based-on-comic', 22 | 'tv-special', 23 | 'fight', 24 | 'violence') 25 | AND kt.kind = 'movie' 26 | AND n.name LIKE '%Downey%Robert%' 27 | AND t.production_year > 2000 28 | AND kt.id = t.kind_id 29 | AND t.id = mk.movie_id 30 | AND t.id = ci.movie_id 31 | AND t.id = cc.movie_id 32 | AND mk.movie_id = ci.movie_id 33 | AND mk.movie_id = cc.movie_id 34 | AND ci.movie_id = cc.movie_id 35 | AND chn.id = ci.person_role_id 36 | AND n.id = ci.person_id 37 | AND k.id = mk.keyword_id 38 | AND cct1.id = cc.subject_id 39 | AND cct2.id = cc.status_id; 40 | 41 | -------------------------------------------------------------------------------- /resource/jobquery/20c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS cast_member, 2 | MIN(t.title) AS complete_dynamic_hero_movie 3 | FROM complete_cast AS cc, 4 | comp_cast_type AS cct1, 5 | comp_cast_type AS cct2, 6 | char_name AS chn, 7 | cast_info AS ci, 8 | keyword AS k, 9 | kind_type AS kt, 10 | movie_keyword AS mk, 11 | name AS n, 12 | title AS t 13 | WHERE cct1.kind = 'cast' 14 | AND cct2.kind LIKE '%complete%' 15 | AND chn.name IS NOT NULL 16 | AND (chn.name LIKE '%man%' 17 | OR chn.name LIKE '%Man%') 18 | AND k.keyword IN ('superhero', 19 | 'marvel-comics', 20 | 'based-on-comic', 21 | 'tv-special', 22 | 'fight', 23 | 'violence', 24 | 'magnet', 25 | 'web', 26 | 'claw', 27 | 'laser') 28 | AND kt.kind = 'movie' 29 | AND t.production_year > 2000 30 | AND kt.id = t.kind_id 31 | AND t.id = mk.movie_id 32 | AND t.id = ci.movie_id 33 | AND t.id = cc.movie_id 34 | AND mk.movie_id = ci.movie_id 35 | AND mk.movie_id = cc.movie_id 36 | AND ci.movie_id = cc.movie_id 37 | AND chn.id = ci.person_role_id 38 | AND n.id = ci.person_id 39 | AND k.id = mk.keyword_id 40 | AND cct1.id = cc.subject_id 41 | AND cct2.id = cc.status_id; 42 | 43 | -------------------------------------------------------------------------------- /resource/jobquery/21a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS company_name, 2 | MIN(lt.link) AS link_type, 3 | MIN(t.title) AS western_follow_up 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | keyword AS k, 7 | link_type AS lt, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | movie_keyword AS mk, 11 | movie_link AS ml, 12 | title AS t 13 | WHERE cn.country_code !='[pl]' 14 | AND (cn.name LIKE '%Film%' 15 | OR cn.name LIKE '%Warner%') 16 | AND ct.kind ='production companies' 17 | AND k.keyword ='sequel' 18 | AND lt.link LIKE '%follow%' 19 | AND mc.note IS NULL 20 | AND mi.info IN ('Sweden', 21 | 'Norway', 22 | 'Germany', 23 | 'Denmark', 24 | 'Swedish', 25 | 'Denish', 26 | 'Norwegian', 27 | 'German') 28 | AND t.production_year BETWEEN 1950 AND 2000 29 | AND lt.id = ml.link_type_id 30 | AND ml.movie_id = t.id 31 | AND t.id = mk.movie_id 32 | AND mk.keyword_id = k.id 33 | AND t.id = mc.movie_id 34 | AND mc.company_type_id = ct.id 35 | AND mc.company_id = cn.id 36 | AND mi.movie_id = t.id 37 | AND ml.movie_id = mk.movie_id 38 | AND ml.movie_id = mc.movie_id 39 | AND mk.movie_id = mc.movie_id 40 | AND ml.movie_id = mi.movie_id 41 | AND mk.movie_id = mi.movie_id 42 | AND mc.movie_id = mi.movie_id; 43 | 44 | -------------------------------------------------------------------------------- /resource/jobquery/21b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS company_name, 2 | MIN(lt.link) AS link_type, 3 | MIN(t.title) AS german_follow_up 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | keyword AS k, 7 | link_type AS lt, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | movie_keyword AS mk, 11 | movie_link AS ml, 12 | title AS t 13 | WHERE cn.country_code !='[pl]' 14 | AND (cn.name LIKE '%Film%' 15 | OR cn.name LIKE '%Warner%') 16 | AND ct.kind ='production companies' 17 | AND k.keyword ='sequel' 18 | AND lt.link LIKE '%follow%' 19 | AND mc.note IS NULL 20 | AND mi.info IN ('Germany', 21 | 'German') 22 | AND t.production_year BETWEEN 2000 AND 2010 23 | AND lt.id = ml.link_type_id 24 | AND ml.movie_id = t.id 25 | AND t.id = mk.movie_id 26 | AND mk.keyword_id = k.id 27 | AND t.id = mc.movie_id 28 | AND mc.company_type_id = ct.id 29 | AND mc.company_id = cn.id 30 | AND mi.movie_id = t.id 31 | AND ml.movie_id = mk.movie_id 32 | AND ml.movie_id = mc.movie_id 33 | AND mk.movie_id = mc.movie_id 34 | AND ml.movie_id = mi.movie_id 35 | AND mk.movie_id = mi.movie_id 36 | AND mc.movie_id = mi.movie_id; 37 | 38 | -------------------------------------------------------------------------------- /resource/jobquery/21c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS company_name, 2 | MIN(lt.link) AS link_type, 3 | MIN(t.title) AS western_follow_up 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | keyword AS k, 7 | link_type AS lt, 8 | movie_companies AS mc, 9 | movie_info AS mi, 10 | movie_keyword AS mk, 11 | movie_link AS ml, 12 | title AS t 13 | WHERE cn.country_code !='[pl]' 14 | AND (cn.name LIKE '%Film%' 15 | OR cn.name LIKE '%Warner%') 16 | AND ct.kind ='production companies' 17 | AND k.keyword ='sequel' 18 | AND lt.link LIKE '%follow%' 19 | AND mc.note IS NULL 20 | AND mi.info IN ('Sweden', 21 | 'Norway', 22 | 'Germany', 23 | 'Denmark', 24 | 'Swedish', 25 | 'Denish', 26 | 'Norwegian', 27 | 'German', 28 | 'English') 29 | AND t.production_year BETWEEN 1950 AND 2010 30 | AND lt.id = ml.link_type_id 31 | AND ml.movie_id = t.id 32 | AND t.id = mk.movie_id 33 | AND mk.keyword_id = k.id 34 | AND t.id = mc.movie_id 35 | AND mc.company_type_id = ct.id 36 | AND mc.company_id = cn.id 37 | AND mi.movie_id = t.id 38 | AND ml.movie_id = mk.movie_id 39 | AND ml.movie_id = mc.movie_id 40 | AND mk.movie_id = mc.movie_id 41 | AND ml.movie_id = mi.movie_id 42 | AND mk.movie_id = mi.movie_id 43 | AND mc.movie_id = mi.movie_id; 44 | 45 | -------------------------------------------------------------------------------- /resource/jobquery/22a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS movie_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS western_violent_movie 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it1, 7 | info_type AS it, 8 | keyword AS k, 9 | kind_type AS kt, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_info_idx AS mi_idx, 13 | movie_keyword AS mk, 14 | title AS t 15 | WHERE cn.country_code != '[us]' 16 | AND it1.info = 'countries' 17 | AND it.info = 'rating' 18 | AND k.keyword IN ('murder', 19 | 'murder-in-title', 20 | 'blood', 21 | 'violence') 22 | AND kt.kind IN ('movie', 23 | 'episode') 24 | AND mc.note NOT LIKE '%(USA)%' 25 | AND mc.note LIKE '%(200%)%' 26 | AND mi.info IN ('Germany', 27 | 'German', 28 | 'USA', 29 | 'American') 30 | AND mi_idx.info < '7.0' 31 | AND t.production_year > 2008 32 | AND kt.id = t.kind_id 33 | AND t.id = mi.movie_id 34 | AND t.id = mk.movie_id 35 | AND t.id = mi_idx.movie_id 36 | AND t.id = mc.movie_id 37 | AND mk.movie_id = mi.movie_id 38 | AND mk.movie_id = mi_idx.movie_id 39 | AND mk.movie_id = mc.movie_id 40 | AND mi.movie_id = mi_idx.movie_id 41 | AND mi.movie_id = mc.movie_id 42 | AND mc.movie_id = mi_idx.movie_id 43 | AND k.id = mk.keyword_id 44 | AND it1.id = mi.info_type_id 45 | AND it.id = mi_idx.info_type_id 46 | AND ct.id = mc.company_type_id 47 | AND cn.id = mc.company_id; 48 | 49 | -------------------------------------------------------------------------------- /resource/jobquery/22b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS movie_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS western_violent_movie 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it1, 7 | info_type AS it, 8 | keyword AS k, 9 | kind_type AS kt, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_info_idx AS mi_idx, 13 | movie_keyword AS mk, 14 | title AS t 15 | WHERE cn.country_code != '[us]' 16 | AND it1.info = 'countries' 17 | AND it.info = 'rating' 18 | AND k.keyword IN ('murder', 19 | 'murder-in-title', 20 | 'blood', 21 | 'violence') 22 | AND kt.kind IN ('movie', 23 | 'episode') 24 | AND mc.note NOT LIKE '%(USA)%' 25 | AND mc.note LIKE '%(200%)%' 26 | AND mi.info IN ('Germany', 27 | 'German', 28 | 'USA', 29 | 'American') 30 | AND mi_idx.info < '7.0' 31 | AND t.production_year > 2009 32 | AND kt.id = t.kind_id 33 | AND t.id = mi.movie_id 34 | AND t.id = mk.movie_id 35 | AND t.id = mi_idx.movie_id 36 | AND t.id = mc.movie_id 37 | AND mk.movie_id = mi.movie_id 38 | AND mk.movie_id = mi_idx.movie_id 39 | AND mk.movie_id = mc.movie_id 40 | AND mi.movie_id = mi_idx.movie_id 41 | AND mi.movie_id = mc.movie_id 42 | AND mc.movie_id = mi_idx.movie_id 43 | AND k.id = mk.keyword_id 44 | AND it1.id = mi.info_type_id 45 | AND it.id = mi_idx.info_type_id 46 | AND ct.id = mc.company_type_id 47 | AND cn.id = mc.company_id; 48 | 49 | -------------------------------------------------------------------------------- /resource/jobquery/22c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS movie_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS western_violent_movie 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it1, 7 | info_type AS it, 8 | keyword AS k, 9 | kind_type AS kt, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_info_idx AS mi_idx, 13 | movie_keyword AS mk, 14 | title AS t 15 | WHERE cn.country_code != '[us]' 16 | AND it1.info = 'countries' 17 | AND it.info = 'rating' 18 | AND k.keyword IN ('murder', 19 | 'murder-in-title', 20 | 'blood', 21 | 'violence') 22 | AND kt.kind IN ('movie', 23 | 'episode') 24 | AND mc.note NOT LIKE '%(USA)%' 25 | AND mc.note LIKE '%(200%)%' 26 | AND mi.info IN ('Sweden', 27 | 'Norway', 28 | 'Germany', 29 | 'Denmark', 30 | 'Swedish', 31 | 'Danish', 32 | 'Norwegian', 33 | 'German', 34 | 'USA', 35 | 'American') 36 | AND mi_idx.info < '8.5' 37 | AND t.production_year > 2005 38 | AND kt.id = t.kind_id 39 | AND t.id = mi.movie_id 40 | AND t.id = mk.movie_id 41 | AND t.id = mi_idx.movie_id 42 | AND t.id = mc.movie_id 43 | AND mk.movie_id = mi.movie_id 44 | AND mk.movie_id = mi_idx.movie_id 45 | AND mk.movie_id = mc.movie_id 46 | AND mi.movie_id = mi_idx.movie_id 47 | AND mi.movie_id = mc.movie_id 48 | AND mc.movie_id = mi_idx.movie_id 49 | AND k.id = mk.keyword_id 50 | AND it1.id = mi.info_type_id 51 | AND it.id = mi_idx.info_type_id 52 | AND ct.id = mc.company_type_id 53 | AND cn.id = mc.company_id; 54 | 55 | -------------------------------------------------------------------------------- /resource/jobquery/22d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS movie_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS western_violent_movie 4 | FROM company_name AS cn, 5 | company_type AS ct, 6 | info_type AS it1, 7 | info_type AS it, 8 | keyword AS k, 9 | kind_type AS kt, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_info_idx AS mi_idx, 13 | movie_keyword AS mk, 14 | title AS t 15 | WHERE cn.country_code != '[us]' 16 | AND it1.info = 'countries' 17 | AND it.info = 'rating' 18 | AND k.keyword IN ('murder', 19 | 'murder-in-title', 20 | 'blood', 21 | 'violence') 22 | AND kt.kind IN ('movie', 23 | 'episode') 24 | AND mi.info IN ('Sweden', 25 | 'Norway', 26 | 'Germany', 27 | 'Denmark', 28 | 'Swedish', 29 | 'Danish', 30 | 'Norwegian', 31 | 'German', 32 | 'USA', 33 | 'American') 34 | AND mi_idx.info < '8.5' 35 | AND t.production_year > 2005 36 | AND kt.id = t.kind_id 37 | AND t.id = mi.movie_id 38 | AND t.id = mk.movie_id 39 | AND t.id = mi_idx.movie_id 40 | AND t.id = mc.movie_id 41 | AND mk.movie_id = mi.movie_id 42 | AND mk.movie_id = mi_idx.movie_id 43 | AND mk.movie_id = mc.movie_id 44 | AND mi.movie_id = mi_idx.movie_id 45 | AND mi.movie_id = mc.movie_id 46 | AND mc.movie_id = mi_idx.movie_id 47 | AND k.id = mk.keyword_id 48 | AND it1.id = mi.info_type_id 49 | AND it.id = mi_idx.info_type_id 50 | AND ct.id = mc.company_type_id 51 | AND cn.id = mc.company_id; 52 | 53 | -------------------------------------------------------------------------------- /resource/jobquery/23a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(kt.kind) AS movie_kind, 2 | MIN(t.title) AS complete_us_internet_movie 3 | FROM complete_cast AS cc, 4 | comp_cast_type AS cct1, 5 | company_name AS cn, 6 | company_type AS ct, 7 | info_type AS it1, 8 | keyword AS k, 9 | kind_type AS kt, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_keyword AS mk, 13 | title AS t 14 | WHERE cct1.kind = 'complete+verified' 15 | AND cn.country_code = '[us]' 16 | AND it1.info = 'release dates' 17 | AND kt.kind IN ('movie') 18 | AND mi.note LIKE '%internet%' 19 | AND mi.info IS NOT NULL 20 | AND (mi.info LIKE 'USA:% 199%' 21 | OR mi.info LIKE 'USA:% 200%') 22 | AND t.production_year > 2000 23 | AND kt.id = t.kind_id 24 | AND t.id = mi.movie_id 25 | AND t.id = mk.movie_id 26 | AND t.id = mc.movie_id 27 | AND t.id = cc.movie_id 28 | AND mk.movie_id = mi.movie_id 29 | AND mk.movie_id = mc.movie_id 30 | AND mk.movie_id = cc.movie_id 31 | AND mi.movie_id = mc.movie_id 32 | AND mi.movie_id = cc.movie_id 33 | AND mc.movie_id = cc.movie_id 34 | AND k.id = mk.keyword_id 35 | AND it1.id = mi.info_type_id 36 | AND cn.id = mc.company_id 37 | AND ct.id = mc.company_type_id 38 | AND cct1.id = cc.status_id; 39 | 40 | -------------------------------------------------------------------------------- /resource/jobquery/23b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(kt.kind) AS movie_kind, 2 | MIN(t.title) AS complete_nerdy_internet_movie 3 | FROM complete_cast AS cc, 4 | comp_cast_type AS cct1, 5 | company_name AS cn, 6 | company_type AS ct, 7 | info_type AS it1, 8 | keyword AS k, 9 | kind_type AS kt, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_keyword AS mk, 13 | title AS t 14 | WHERE cct1.kind = 'complete+verified' 15 | AND cn.country_code = '[us]' 16 | AND it1.info = 'release dates' 17 | AND k.keyword IN ('nerd', 18 | 'loner', 19 | 'alienation', 20 | 'dignity') 21 | AND kt.kind IN ('movie') 22 | AND mi.note LIKE '%internet%' 23 | AND mi.info LIKE 'USA:% 200%' 24 | AND t.production_year > 2000 25 | AND kt.id = t.kind_id 26 | AND t.id = mi.movie_id 27 | AND t.id = mk.movie_id 28 | AND t.id = mc.movie_id 29 | AND t.id = cc.movie_id 30 | AND mk.movie_id = mi.movie_id 31 | AND mk.movie_id = mc.movie_id 32 | AND mk.movie_id = cc.movie_id 33 | AND mi.movie_id = mc.movie_id 34 | AND mi.movie_id = cc.movie_id 35 | AND mc.movie_id = cc.movie_id 36 | AND k.id = mk.keyword_id 37 | AND it1.id = mi.info_type_id 38 | AND cn.id = mc.company_id 39 | AND ct.id = mc.company_type_id 40 | AND cct1.id = cc.status_id; 41 | 42 | -------------------------------------------------------------------------------- /resource/jobquery/23c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(kt.kind) AS movie_kind, 2 | MIN(t.title) AS complete_us_internet_movie 3 | FROM complete_cast AS cc, 4 | comp_cast_type AS cct1, 5 | company_name AS cn, 6 | company_type AS ct, 7 | info_type AS it1, 8 | keyword AS k, 9 | kind_type AS kt, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_keyword AS mk, 13 | title AS t 14 | WHERE cct1.kind = 'complete+verified' 15 | AND cn.country_code = '[us]' 16 | AND it1.info = 'release dates' 17 | AND kt.kind IN ('movie', 18 | 'tv movie', 19 | 'video movie', 20 | 'video game') 21 | AND mi.note LIKE '%internet%' 22 | AND mi.info IS NOT NULL 23 | AND (mi.info LIKE 'USA:% 199%' 24 | OR mi.info LIKE 'USA:% 200%') 25 | AND t.production_year > 1990 26 | AND kt.id = t.kind_id 27 | AND t.id = mi.movie_id 28 | AND t.id = mk.movie_id 29 | AND t.id = mc.movie_id 30 | AND t.id = cc.movie_id 31 | AND mk.movie_id = mi.movie_id 32 | AND mk.movie_id = mc.movie_id 33 | AND mk.movie_id = cc.movie_id 34 | AND mi.movie_id = mc.movie_id 35 | AND mi.movie_id = cc.movie_id 36 | AND mc.movie_id = cc.movie_id 37 | AND k.id = mk.keyword_id 38 | AND it1.id = mi.info_type_id 39 | AND cn.id = mc.company_id 40 | AND ct.id = mc.company_type_id 41 | AND cct1.id = cc.status_id; 42 | 43 | -------------------------------------------------------------------------------- /resource/jobquery/24a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS voiced_char_name, 2 | MIN(n.name) AS voicing_actress_name, 3 | MIN(t.title) AS voiced_action_movie_jap_eng 4 | FROM aka_name AS an, 5 | char_name AS chn, 6 | cast_info AS ci, 7 | company_name AS cn, 8 | info_type AS it, 9 | keyword AS k, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_keyword AS mk, 13 | name AS n, 14 | role_type AS rt, 15 | title AS t 16 | WHERE ci.note IN ('(voice)', 17 | '(voice: Japanese version)', 18 | '(voice) (uncredited)', 19 | '(voice: English version)') 20 | AND cn.country_code ='[us]' 21 | AND it.info = 'release dates' 22 | AND k.keyword IN ('hero', 23 | 'martial-arts', 24 | 'hand-to-hand-combat') 25 | AND mi.info IS NOT NULL 26 | AND (mi.info LIKE 'Japan:%201%' 27 | OR mi.info LIKE 'USA:%201%') 28 | AND n.gender ='f' 29 | AND n.name LIKE '%An%' 30 | AND rt.role ='actress' 31 | AND t.production_year > 2010 32 | AND t.id = mi.movie_id 33 | AND t.id = mc.movie_id 34 | AND t.id = ci.movie_id 35 | AND t.id = mk.movie_id 36 | AND mc.movie_id = ci.movie_id 37 | AND mc.movie_id = mi.movie_id 38 | AND mc.movie_id = mk.movie_id 39 | AND mi.movie_id = ci.movie_id 40 | AND mi.movie_id = mk.movie_id 41 | AND ci.movie_id = mk.movie_id 42 | AND cn.id = mc.company_id 43 | AND it.id = mi.info_type_id 44 | AND n.id = ci.person_id 45 | AND rt.id = ci.role_id 46 | AND n.id = an.person_id 47 | AND ci.person_id = an.person_id 48 | AND chn.id = ci.person_role_id 49 | AND k.id = mk.keyword_id; 50 | 51 | -------------------------------------------------------------------------------- /resource/jobquery/24b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS voiced_char_name, 2 | MIN(n.name) AS voicing_actress_name, 3 | MIN(t.title) AS kung_fu_panda 4 | FROM aka_name AS an, 5 | char_name AS chn, 6 | cast_info AS ci, 7 | company_name AS cn, 8 | info_type AS it, 9 | keyword AS k, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_keyword AS mk, 13 | name AS n, 14 | role_type AS rt, 15 | title AS t 16 | WHERE ci.note IN ('(voice)', 17 | '(voice: Japanese version)', 18 | '(voice) (uncredited)', 19 | '(voice: English version)') 20 | AND cn.country_code ='[us]' 21 | AND cn.name = 'DreamWorks Animation' 22 | AND it.info = 'release dates' 23 | AND k.keyword IN ('hero', 24 | 'martial-arts', 25 | 'hand-to-hand-combat', 26 | 'computer-animated-movie') 27 | AND mi.info IS NOT NULL 28 | AND (mi.info LIKE 'Japan:%201%' 29 | OR mi.info LIKE 'USA:%201%') 30 | AND n.gender ='f' 31 | AND n.name LIKE '%An%' 32 | AND rt.role ='actress' 33 | AND t.production_year > 2010 34 | AND t.title LIKE 'Kung Fu Panda%' 35 | AND t.id = mi.movie_id 36 | AND t.id = mc.movie_id 37 | AND t.id = ci.movie_id 38 | AND t.id = mk.movie_id 39 | AND mc.movie_id = ci.movie_id 40 | AND mc.movie_id = mi.movie_id 41 | AND mc.movie_id = mk.movie_id 42 | AND mi.movie_id = ci.movie_id 43 | AND mi.movie_id = mk.movie_id 44 | AND ci.movie_id = mk.movie_id 45 | AND cn.id = mc.company_id 46 | AND it.id = mi.info_type_id 47 | AND n.id = ci.person_id 48 | AND rt.id = ci.role_id 49 | AND n.id = an.person_id 50 | AND ci.person_id = an.person_id 51 | AND chn.id = ci.person_role_id 52 | AND k.id = mk.keyword_id; 53 | 54 | -------------------------------------------------------------------------------- /resource/jobquery/25a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(n.name) AS male_writer, 4 | MIN(t.title) AS violent_movie_title 5 | FROM cast_info AS ci, 6 | info_type AS it1, 7 | info_type AS it, 8 | keyword AS k, 9 | movie_info AS mi, 10 | movie_info_idx AS mi_idx, 11 | movie_keyword AS mk, 12 | name AS n, 13 | title AS t 14 | WHERE ci.note IN ('(writer)', 15 | '(head writer)', 16 | '(written by)', 17 | '(story)', 18 | '(story editor)') 19 | AND it1.info = 'genres' 20 | AND it.info = 'votes' 21 | AND k.keyword IN ('murder', 22 | 'blood', 23 | 'gore', 24 | 'death', 25 | 'female-nudity') 26 | AND mi.info = 'Horror' 27 | AND n.gender = 'm' 28 | AND t.id = mi.movie_id 29 | AND t.id = mi_idx.movie_id 30 | AND t.id = ci.movie_id 31 | AND t.id = mk.movie_id 32 | AND ci.movie_id = mi.movie_id 33 | AND ci.movie_id = mi_idx.movie_id 34 | AND ci.movie_id = mk.movie_id 35 | AND mi.movie_id = mi_idx.movie_id 36 | AND mi.movie_id = mk.movie_id 37 | AND mi_idx.movie_id = mk.movie_id 38 | AND n.id = ci.person_id 39 | AND it1.id = mi.info_type_id 40 | AND it.id = mi_idx.info_type_id 41 | AND k.id = mk.keyword_id; 42 | 43 | -------------------------------------------------------------------------------- /resource/jobquery/25b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(n.name) AS male_writer, 4 | MIN(t.title) AS violent_movie_title 5 | FROM cast_info AS ci, 6 | info_type AS it1, 7 | info_type AS it, 8 | keyword AS k, 9 | movie_info AS mi, 10 | movie_info_idx AS mi_idx, 11 | movie_keyword AS mk, 12 | name AS n, 13 | title AS t 14 | WHERE ci.note IN ('(writer)', 15 | '(head writer)', 16 | '(written by)', 17 | '(story)', 18 | '(story editor)') 19 | AND it1.info = 'genres' 20 | AND it.info = 'votes' 21 | AND k.keyword IN ('murder', 22 | 'blood', 23 | 'gore', 24 | 'death', 25 | 'female-nudity') 26 | AND mi.info = 'Horror' 27 | AND n.gender = 'm' 28 | AND t.production_year > 2010 29 | AND t.title LIKE 'Vampire%' 30 | AND t.id = mi.movie_id 31 | AND t.id = mi_idx.movie_id 32 | AND t.id = ci.movie_id 33 | AND t.id = mk.movie_id 34 | AND ci.movie_id = mi.movie_id 35 | AND ci.movie_id = mi_idx.movie_id 36 | AND ci.movie_id = mk.movie_id 37 | AND mi.movie_id = mi_idx.movie_id 38 | AND mi.movie_id = mk.movie_id 39 | AND mi_idx.movie_id = mk.movie_id 40 | AND n.id = ci.person_id 41 | AND it1.id = mi.info_type_id 42 | AND it.id = mi_idx.info_type_id 43 | AND k.id = mk.keyword_id; 44 | 45 | -------------------------------------------------------------------------------- /resource/jobquery/25c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(n.name) AS male_writer, 4 | MIN(t.title) AS violent_movie_title 5 | FROM cast_info AS ci, 6 | info_type AS it1, 7 | info_type AS it, 8 | keyword AS k, 9 | movie_info AS mi, 10 | movie_info_idx AS mi_idx, 11 | movie_keyword AS mk, 12 | name AS n, 13 | title AS t 14 | WHERE ci.note IN ('(writer)', 15 | '(head writer)', 16 | '(written by)', 17 | '(story)', 18 | '(story editor)') 19 | AND it1.info = 'genres' 20 | AND it.info = 'votes' 21 | AND k.keyword IN ('murder', 22 | 'violence', 23 | 'blood', 24 | 'gore', 25 | 'death', 26 | 'female-nudity', 27 | 'hospital') 28 | AND mi.info IN ('Horror', 29 | 'Action', 30 | 'Sci-Fi', 31 | 'Thriller', 32 | 'Crime', 33 | 'War') 34 | AND n.gender = 'm' 35 | AND t.id = mi.movie_id 36 | AND t.id = mi_idx.movie_id 37 | AND t.id = ci.movie_id 38 | AND t.id = mk.movie_id 39 | AND ci.movie_id = mi.movie_id 40 | AND ci.movie_id = mi_idx.movie_id 41 | AND ci.movie_id = mk.movie_id 42 | AND mi.movie_id = mi_idx.movie_id 43 | AND mi.movie_id = mk.movie_id 44 | AND mi_idx.movie_id = mk.movie_id 45 | AND n.id = ci.person_id 46 | AND it1.id = mi.info_type_id 47 | AND it.id = mi_idx.info_type_id 48 | AND k.id = mk.keyword_id; 49 | 50 | -------------------------------------------------------------------------------- /resource/jobquery/26a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS character_name, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(n.name) AS playing_actor, 4 | MIN(t.title) AS complete_hero_movie 5 | FROM complete_cast AS cc, 6 | comp_cast_type AS cct1, 7 | comp_cast_type AS cct2, 8 | char_name AS chn, 9 | cast_info AS ci, 10 | info_type AS it, 11 | keyword AS k, 12 | kind_type AS kt, 13 | movie_info_idx AS mi_idx, 14 | movie_keyword AS mk, 15 | name AS n, 16 | title AS t 17 | WHERE cct1.kind = 'cast' 18 | AND cct2.kind LIKE '%complete%' 19 | AND chn.name IS NOT NULL 20 | AND (chn.name LIKE '%man%' 21 | OR chn.name LIKE '%Man%') 22 | AND it.info = 'rating' 23 | AND k.keyword IN ('superhero', 24 | 'marvel-comics', 25 | 'based-on-comic', 26 | 'tv-special', 27 | 'fight', 28 | 'violence', 29 | 'magnet', 30 | 'web', 31 | 'claw', 32 | 'laser') 33 | AND kt.kind = 'movie' 34 | AND mi_idx.info > '7.0' 35 | AND t.production_year > 2000 36 | AND kt.id = t.kind_id 37 | AND t.id = mk.movie_id 38 | AND t.id = ci.movie_id 39 | AND t.id = cc.movie_id 40 | AND t.id = mi_idx.movie_id 41 | AND mk.movie_id = ci.movie_id 42 | AND mk.movie_id = cc.movie_id 43 | AND mk.movie_id = mi_idx.movie_id 44 | AND ci.movie_id = cc.movie_id 45 | AND ci.movie_id = mi_idx.movie_id 46 | AND cc.movie_id = mi_idx.movie_id 47 | AND chn.id = ci.person_role_id 48 | AND n.id = ci.person_id 49 | AND k.id = mk.keyword_id 50 | AND cct1.id = cc.subject_id 51 | AND cct2.id = cc.status_id 52 | AND it.id = mi_idx.info_type_id; 53 | 54 | -------------------------------------------------------------------------------- /resource/jobquery/26b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS character_name, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS complete_hero_movie 4 | FROM complete_cast AS cc, 5 | comp_cast_type AS cct1, 6 | comp_cast_type AS cct2, 7 | char_name AS chn, 8 | cast_info AS ci, 9 | info_type AS it, 10 | keyword AS k, 11 | kind_type AS kt, 12 | movie_info_idx AS mi_idx, 13 | movie_keyword AS mk, 14 | name AS n, 15 | title AS t 16 | WHERE cct1.kind = 'cast' 17 | AND cct2.kind LIKE '%complete%' 18 | AND chn.name IS NOT NULL 19 | AND (chn.name LIKE '%man%' 20 | OR chn.name LIKE '%Man%') 21 | AND it.info = 'rating' 22 | AND k.keyword IN ('superhero', 23 | 'marvel-comics', 24 | 'based-on-comic', 25 | 'fight') 26 | AND kt.kind = 'movie' 27 | AND mi_idx.info > '8.0' 28 | AND t.production_year > 2005 29 | AND kt.id = t.kind_id 30 | AND t.id = mk.movie_id 31 | AND t.id = ci.movie_id 32 | AND t.id = cc.movie_id 33 | AND t.id = mi_idx.movie_id 34 | AND mk.movie_id = ci.movie_id 35 | AND mk.movie_id = cc.movie_id 36 | AND mk.movie_id = mi_idx.movie_id 37 | AND ci.movie_id = cc.movie_id 38 | AND ci.movie_id = mi_idx.movie_id 39 | AND cc.movie_id = mi_idx.movie_id 40 | AND chn.id = ci.person_role_id 41 | AND n.id = ci.person_id 42 | AND k.id = mk.keyword_id 43 | AND cct1.id = cc.subject_id 44 | AND cct2.id = cc.status_id 45 | AND it.id = mi_idx.info_type_id; 46 | 47 | -------------------------------------------------------------------------------- /resource/jobquery/26c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS character_name, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS complete_hero_movie 4 | FROM complete_cast AS cc, 5 | comp_cast_type AS cct1, 6 | comp_cast_type AS cct2, 7 | char_name AS chn, 8 | cast_info AS ci, 9 | info_type AS it, 10 | keyword AS k, 11 | kind_type AS kt, 12 | movie_info_idx AS mi_idx, 13 | movie_keyword AS mk, 14 | name AS n, 15 | title AS t 16 | WHERE cct1.kind = 'cast' 17 | AND cct2.kind LIKE '%complete%' 18 | AND chn.name IS NOT NULL 19 | AND (chn.name LIKE '%man%' 20 | OR chn.name LIKE '%Man%') 21 | AND it.info = 'rating' 22 | AND k.keyword IN ('superhero', 23 | 'marvel-comics', 24 | 'based-on-comic', 25 | 'tv-special', 26 | 'fight', 27 | 'violence', 28 | 'magnet', 29 | 'web', 30 | 'claw', 31 | 'laser') 32 | AND kt.kind = 'movie' 33 | AND t.production_year > 2000 34 | AND kt.id = t.kind_id 35 | AND t.id = mk.movie_id 36 | AND t.id = ci.movie_id 37 | AND t.id = cc.movie_id 38 | AND t.id = mi_idx.movie_id 39 | AND mk.movie_id = ci.movie_id 40 | AND mk.movie_id = cc.movie_id 41 | AND mk.movie_id = mi_idx.movie_id 42 | AND ci.movie_id = cc.movie_id 43 | AND ci.movie_id = mi_idx.movie_id 44 | AND cc.movie_id = mi_idx.movie_id 45 | AND chn.id = ci.person_role_id 46 | AND n.id = ci.person_id 47 | AND k.id = mk.keyword_id 48 | AND cct1.id = cc.subject_id 49 | AND cct2.id = cc.status_id 50 | AND it.id = mi_idx.info_type_id; 51 | 52 | -------------------------------------------------------------------------------- /resource/jobquery/27a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS producing_company, 2 | MIN(lt.link) AS link_type, 3 | MIN(t.title) AS complete_western_sequel 4 | FROM complete_cast AS cc, 5 | comp_cast_type AS cct1, 6 | comp_cast_type AS cct2, 7 | company_name AS cn, 8 | company_type AS ct, 9 | keyword AS k, 10 | link_type AS lt, 11 | movie_companies AS mc, 12 | movie_info AS mi, 13 | movie_keyword AS mk, 14 | movie_link AS ml, 15 | title AS t 16 | WHERE cct1.kind IN ('cast', 17 | 'crew') 18 | AND cct2.kind = 'complete' 19 | AND cn.country_code !='[pl]' 20 | AND (cn.name LIKE '%Film%' 21 | OR cn.name LIKE '%Warner%') 22 | AND ct.kind ='production companies' 23 | AND k.keyword ='sequel' 24 | AND lt.link LIKE '%follow%' 25 | AND mc.note IS NULL 26 | AND mi.info IN ('Sweden', 27 | 'Germany', 28 | 'Swedish', 29 | 'German') 30 | AND t.production_year BETWEEN 1950 AND 2000 31 | AND lt.id = ml.link_type_id 32 | AND ml.movie_id = t.id 33 | AND t.id = mk.movie_id 34 | AND mk.keyword_id = k.id 35 | AND t.id = mc.movie_id 36 | AND mc.company_type_id = ct.id 37 | AND mc.company_id = cn.id 38 | AND mi.movie_id = t.id 39 | AND t.id = cc.movie_id 40 | AND cct1.id = cc.subject_id 41 | AND cct2.id = cc.status_id 42 | AND ml.movie_id = mk.movie_id 43 | AND ml.movie_id = mc.movie_id 44 | AND mk.movie_id = mc.movie_id 45 | AND ml.movie_id = mi.movie_id 46 | AND mk.movie_id = mi.movie_id 47 | AND mc.movie_id = mi.movie_id 48 | AND ml.movie_id = cc.movie_id 49 | AND mk.movie_id = cc.movie_id 50 | AND mc.movie_id = cc.movie_id 51 | AND mi.movie_id = cc.movie_id; 52 | 53 | -------------------------------------------------------------------------------- /resource/jobquery/27b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS producing_company, 2 | MIN(lt.link) AS link_type, 3 | MIN(t.title) AS complete_western_sequel 4 | FROM complete_cast AS cc, 5 | comp_cast_type AS cct1, 6 | comp_cast_type AS cct2, 7 | company_name AS cn, 8 | company_type AS ct, 9 | keyword AS k, 10 | link_type AS lt, 11 | movie_companies AS mc, 12 | movie_info AS mi, 13 | movie_keyword AS mk, 14 | movie_link AS ml, 15 | title AS t 16 | WHERE cct1.kind IN ('cast', 17 | 'crew') 18 | AND cct2.kind = 'complete' 19 | AND cn.country_code !='[pl]' 20 | AND (cn.name LIKE '%Film%' 21 | OR cn.name LIKE '%Warner%') 22 | AND ct.kind ='production companies' 23 | AND k.keyword ='sequel' 24 | AND lt.link LIKE '%follow%' 25 | AND mc.note IS NULL 26 | AND mi.info IN ('Sweden', 27 | 'Germany', 28 | 'Swedish', 29 | 'German') 30 | AND t.production_year = 1998 31 | AND lt.id = ml.link_type_id 32 | AND ml.movie_id = t.id 33 | AND t.id = mk.movie_id 34 | AND mk.keyword_id = k.id 35 | AND t.id = mc.movie_id 36 | AND mc.company_type_id = ct.id 37 | AND mc.company_id = cn.id 38 | AND mi.movie_id = t.id 39 | AND t.id = cc.movie_id 40 | AND cct1.id = cc.subject_id 41 | AND cct2.id = cc.status_id 42 | AND ml.movie_id = mk.movie_id 43 | AND ml.movie_id = mc.movie_id 44 | AND mk.movie_id = mc.movie_id 45 | AND ml.movie_id = mi.movie_id 46 | AND mk.movie_id = mi.movie_id 47 | AND mc.movie_id = mi.movie_id 48 | AND ml.movie_id = cc.movie_id 49 | AND mk.movie_id = cc.movie_id 50 | AND mc.movie_id = cc.movie_id 51 | AND mi.movie_id = cc.movie_id; 52 | 53 | -------------------------------------------------------------------------------- /resource/jobquery/27c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS producing_company, 2 | MIN(lt.link) AS link_type, 3 | MIN(t.title) AS complete_western_sequel 4 | FROM complete_cast AS cc, 5 | comp_cast_type AS cct1, 6 | comp_cast_type AS cct2, 7 | company_name AS cn, 8 | company_type AS ct, 9 | keyword AS k, 10 | link_type AS lt, 11 | movie_companies AS mc, 12 | movie_info AS mi, 13 | movie_keyword AS mk, 14 | movie_link AS ml, 15 | title AS t 16 | WHERE cct1.kind = 'cast' 17 | AND cct2.kind LIKE 'complete%' 18 | AND cn.country_code !='[pl]' 19 | AND (cn.name LIKE '%Film%' 20 | OR cn.name LIKE '%Warner%') 21 | AND ct.kind ='production companies' 22 | AND k.keyword ='sequel' 23 | AND lt.link LIKE '%follow%' 24 | AND mc.note IS NULL 25 | AND mi.info IN ('Sweden', 26 | 'Norway', 27 | 'Germany', 28 | 'Denmark', 29 | 'Swedish', 30 | 'Denish', 31 | 'Norwegian', 32 | 'German', 33 | 'English') 34 | AND t.production_year BETWEEN 1950 AND 2010 35 | AND lt.id = ml.link_type_id 36 | AND ml.movie_id = t.id 37 | AND t.id = mk.movie_id 38 | AND mk.keyword_id = k.id 39 | AND t.id = mc.movie_id 40 | AND mc.company_type_id = ct.id 41 | AND mc.company_id = cn.id 42 | AND mi.movie_id = t.id 43 | AND t.id = cc.movie_id 44 | AND cct1.id = cc.subject_id 45 | AND cct2.id = cc.status_id 46 | AND ml.movie_id = mk.movie_id 47 | AND ml.movie_id = mc.movie_id 48 | AND mk.movie_id = mc.movie_id 49 | AND ml.movie_id = mi.movie_id 50 | AND mk.movie_id = mi.movie_id 51 | AND mc.movie_id = mi.movie_id 52 | AND ml.movie_id = cc.movie_id 53 | AND mk.movie_id = cc.movie_id 54 | AND mc.movie_id = cc.movie_id 55 | AND mi.movie_id = cc.movie_id; 56 | 57 | -------------------------------------------------------------------------------- /resource/jobquery/28a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS movie_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS complete_euro_dark_movie 4 | FROM complete_cast AS cc, 5 | comp_cast_type AS cct1, 6 | comp_cast_type AS cct2, 7 | company_name AS cn, 8 | company_type AS ct, 9 | info_type AS it1, 10 | info_type AS it, 11 | keyword AS k, 12 | kind_type AS kt, 13 | movie_companies AS mc, 14 | movie_info AS mi, 15 | movie_info_idx AS mi_idx, 16 | movie_keyword AS mk, 17 | title AS t 18 | WHERE cct1.kind = 'crew' 19 | AND cct2.kind != 'complete+verified' 20 | AND cn.country_code != '[us]' 21 | AND it1.info = 'countries' 22 | AND it.info = 'rating' 23 | AND k.keyword IN ('murder', 24 | 'murder-in-title', 25 | 'blood', 26 | 'violence') 27 | AND kt.kind IN ('movie', 28 | 'episode') 29 | AND mc.note NOT LIKE '%(USA)%' 30 | AND mc.note LIKE '%(200%)%' 31 | AND mi.info IN ('Sweden', 32 | 'Norway', 33 | 'Germany', 34 | 'Denmark', 35 | 'Swedish', 36 | 'Danish', 37 | 'Norwegian', 38 | 'German', 39 | 'USA', 40 | 'American') 41 | AND mi_idx.info < '8.5' 42 | AND t.production_year > 2000 43 | AND kt.id = t.kind_id 44 | AND t.id = mi.movie_id 45 | AND t.id = mk.movie_id 46 | AND t.id = mi_idx.movie_id 47 | AND t.id = mc.movie_id 48 | AND t.id = cc.movie_id 49 | AND mk.movie_id = mi.movie_id 50 | AND mk.movie_id = mi_idx.movie_id 51 | AND mk.movie_id = mc.movie_id 52 | AND mk.movie_id = cc.movie_id 53 | AND mi.movie_id = mi_idx.movie_id 54 | AND mi.movie_id = mc.movie_id 55 | AND mi.movie_id = cc.movie_id 56 | AND mc.movie_id = mi_idx.movie_id 57 | AND mc.movie_id = cc.movie_id 58 | AND mi_idx.movie_id = cc.movie_id 59 | AND k.id = mk.keyword_id 60 | AND it1.id = mi.info_type_id 61 | AND it.id = mi_idx.info_type_id 62 | AND ct.id = mc.company_type_id 63 | AND cn.id = mc.company_id 64 | AND cct1.id = cc.subject_id 65 | AND cct2.id = cc.status_id; 66 | 67 | -------------------------------------------------------------------------------- /resource/jobquery/28b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS movie_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS complete_euro_dark_movie 4 | FROM complete_cast AS cc, 5 | comp_cast_type AS cct1, 6 | comp_cast_type AS cct2, 7 | company_name AS cn, 8 | company_type AS ct, 9 | info_type AS it1, 10 | info_type AS it, 11 | keyword AS k, 12 | kind_type AS kt, 13 | movie_companies AS mc, 14 | movie_info AS mi, 15 | movie_info_idx AS mi_idx, 16 | movie_keyword AS mk, 17 | title AS t 18 | WHERE cct1.kind = 'crew' 19 | AND cct2.kind != 'complete+verified' 20 | AND cn.country_code != '[us]' 21 | AND it1.info = 'countries' 22 | AND it.info = 'rating' 23 | AND k.keyword IN ('murder', 24 | 'murder-in-title', 25 | 'blood', 26 | 'violence') 27 | AND kt.kind IN ('movie', 28 | 'episode') 29 | AND mc.note NOT LIKE '%(USA)%' 30 | AND mc.note LIKE '%(200%)%' 31 | AND mi.info IN ('Sweden', 32 | 'Germany', 33 | 'Swedish', 34 | 'German') 35 | AND mi_idx.info > '6.5' 36 | AND t.production_year > 2005 37 | AND kt.id = t.kind_id 38 | AND t.id = mi.movie_id 39 | AND t.id = mk.movie_id 40 | AND t.id = mi_idx.movie_id 41 | AND t.id = mc.movie_id 42 | AND t.id = cc.movie_id 43 | AND mk.movie_id = mi.movie_id 44 | AND mk.movie_id = mi_idx.movie_id 45 | AND mk.movie_id = mc.movie_id 46 | AND mk.movie_id = cc.movie_id 47 | AND mi.movie_id = mi_idx.movie_id 48 | AND mi.movie_id = mc.movie_id 49 | AND mi.movie_id = cc.movie_id 50 | AND mc.movie_id = mi_idx.movie_id 51 | AND mc.movie_id = cc.movie_id 52 | AND mi_idx.movie_id = cc.movie_id 53 | AND k.id = mk.keyword_id 54 | AND it1.id = mi.info_type_id 55 | AND it.id = mi_idx.info_type_id 56 | AND ct.id = mc.company_type_id 57 | AND cn.id = mc.company_id 58 | AND cct1.id = cc.subject_id 59 | AND cct2.id = cc.status_id; 60 | 61 | -------------------------------------------------------------------------------- /resource/jobquery/28c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn.name) AS movie_company, 2 | MIN(mi_idx.info) AS rating, 3 | MIN(t.title) AS complete_euro_dark_movie 4 | FROM complete_cast AS cc, 5 | comp_cast_type AS cct1, 6 | comp_cast_type AS cct2, 7 | company_name AS cn, 8 | company_type AS ct, 9 | info_type AS it1, 10 | info_type AS it, 11 | keyword AS k, 12 | kind_type AS kt, 13 | movie_companies AS mc, 14 | movie_info AS mi, 15 | movie_info_idx AS mi_idx, 16 | movie_keyword AS mk, 17 | title AS t 18 | WHERE cct1.kind = 'cast' 19 | AND cct2.kind = 'complete' 20 | AND cn.country_code != '[us]' 21 | AND it1.info = 'countries' 22 | AND it.info = 'rating' 23 | AND k.keyword IN ('murder', 24 | 'murder-in-title', 25 | 'blood', 26 | 'violence') 27 | AND kt.kind IN ('movie', 28 | 'episode') 29 | AND mc.note NOT LIKE '%(USA)%' 30 | AND mc.note LIKE '%(200%)%' 31 | AND mi.info IN ('Sweden', 32 | 'Norway', 33 | 'Germany', 34 | 'Denmark', 35 | 'Swedish', 36 | 'Danish', 37 | 'Norwegian', 38 | 'German', 39 | 'USA', 40 | 'American') 41 | AND mi_idx.info < '8.5' 42 | AND t.production_year > 2005 43 | AND kt.id = t.kind_id 44 | AND t.id = mi.movie_id 45 | AND t.id = mk.movie_id 46 | AND t.id = mi_idx.movie_id 47 | AND t.id = mc.movie_id 48 | AND t.id = cc.movie_id 49 | AND mk.movie_id = mi.movie_id 50 | AND mk.movie_id = mi_idx.movie_id 51 | AND mk.movie_id = mc.movie_id 52 | AND mk.movie_id = cc.movie_id 53 | AND mi.movie_id = mi_idx.movie_id 54 | AND mi.movie_id = mc.movie_id 55 | AND mi.movie_id = cc.movie_id 56 | AND mc.movie_id = mi_idx.movie_id 57 | AND mc.movie_id = cc.movie_id 58 | AND mi_idx.movie_id = cc.movie_id 59 | AND k.id = mk.keyword_id 60 | AND it1.id = mi.info_type_id 61 | AND it.id = mi_idx.info_type_id 62 | AND ct.id = mc.company_type_id 63 | AND cn.id = mc.company_id 64 | AND cct1.id = cc.subject_id 65 | AND cct2.id = cc.status_id; 66 | 67 | -------------------------------------------------------------------------------- /resource/jobquery/29a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS voiced_char, 2 | MIN(n.name) AS voicing_actress, 3 | MIN(t.title) AS voiced_animation 4 | FROM aka_name AS an, 5 | complete_cast AS cc, 6 | comp_cast_type AS cct1, 7 | comp_cast_type AS cct2, 8 | char_name AS chn, 9 | cast_info AS ci, 10 | company_name AS cn, 11 | info_type AS it, 12 | info_type AS it1, 13 | keyword AS k, 14 | movie_companies AS mc, 15 | movie_info AS mi, 16 | movie_keyword AS mk, 17 | name AS n, 18 | person_info AS pi, 19 | role_type AS rt, 20 | title AS t 21 | WHERE cct1.kind ='cast' 22 | AND cct2.kind ='complete+verified' 23 | AND chn.name = 'Queen' 24 | AND ci.note IN ('(voice)', 25 | '(voice) (uncredited)', 26 | '(voice: English version)') 27 | AND cn.country_code ='[us]' 28 | AND it.info = 'release dates' 29 | AND it1.info = 'trivia' 30 | AND k.keyword = 'computer-animation' 31 | AND mi.info IS NOT NULL 32 | AND (mi.info LIKE 'Japan:%200%' 33 | OR mi.info LIKE 'USA:%200%') 34 | AND n.gender ='f' 35 | AND n.name LIKE '%An%' 36 | AND rt.role ='actress' 37 | AND t.title = 'Shrek 2' 38 | AND t.production_year BETWEEN 2000 AND 2010 39 | AND t.id = mi.movie_id 40 | AND t.id = mc.movie_id 41 | AND t.id = ci.movie_id 42 | AND t.id = mk.movie_id 43 | AND t.id = cc.movie_id 44 | AND mc.movie_id = ci.movie_id 45 | AND mc.movie_id = mi.movie_id 46 | AND mc.movie_id = mk.movie_id 47 | AND mc.movie_id = cc.movie_id 48 | AND mi.movie_id = ci.movie_id 49 | AND mi.movie_id = mk.movie_id 50 | AND mi.movie_id = cc.movie_id 51 | AND ci.movie_id = mk.movie_id 52 | AND ci.movie_id = cc.movie_id 53 | AND mk.movie_id = cc.movie_id 54 | AND cn.id = mc.company_id 55 | AND it.id = mi.info_type_id 56 | AND n.id = ci.person_id 57 | AND rt.id = ci.role_id 58 | AND n.id = an.person_id 59 | AND ci.person_id = an.person_id 60 | AND chn.id = ci.person_role_id 61 | AND n.id = pi.person_id 62 | AND ci.person_id = pi.person_id 63 | AND it1.id = pi.info_type_id 64 | AND k.id = mk.keyword_id 65 | AND cct1.id = cc.subject_id 66 | AND cct2.id = cc.status_id; 67 | 68 | -------------------------------------------------------------------------------- /resource/jobquery/29b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS voiced_char, 2 | MIN(n.name) AS voicing_actress, 3 | MIN(t.title) AS voiced_animation 4 | FROM aka_name AS an, 5 | complete_cast AS cc, 6 | comp_cast_type AS cct1, 7 | comp_cast_type AS cct2, 8 | char_name AS chn, 9 | cast_info AS ci, 10 | company_name AS cn, 11 | info_type AS it, 12 | info_type AS it1, 13 | keyword AS k, 14 | movie_companies AS mc, 15 | movie_info AS mi, 16 | movie_keyword AS mk, 17 | name AS n, 18 | person_info AS pi, 19 | role_type AS rt, 20 | title AS t 21 | WHERE cct1.kind ='cast' 22 | AND cct2.kind ='complete+verified' 23 | AND chn.name = 'Queen' 24 | AND ci.note IN ('(voice)', 25 | '(voice) (uncredited)', 26 | '(voice: English version)') 27 | AND cn.country_code ='[us]' 28 | AND it.info = 'release dates' 29 | AND it1.info = 'height' 30 | AND k.keyword = 'computer-animation' 31 | AND mi.info LIKE 'USA:%200%' 32 | AND n.gender ='f' 33 | AND n.name LIKE '%An%' 34 | AND rt.role ='actress' 35 | AND t.title = 'Shrek 2' 36 | AND t.production_year BETWEEN 2000 AND 2005 37 | AND t.id = mi.movie_id 38 | AND t.id = mc.movie_id 39 | AND t.id = ci.movie_id 40 | AND t.id = mk.movie_id 41 | AND t.id = cc.movie_id 42 | AND mc.movie_id = ci.movie_id 43 | AND mc.movie_id = mi.movie_id 44 | AND mc.movie_id = mk.movie_id 45 | AND mc.movie_id = cc.movie_id 46 | AND mi.movie_id = ci.movie_id 47 | AND mi.movie_id = mk.movie_id 48 | AND mi.movie_id = cc.movie_id 49 | AND ci.movie_id = mk.movie_id 50 | AND ci.movie_id = cc.movie_id 51 | AND mk.movie_id = cc.movie_id 52 | AND cn.id = mc.company_id 53 | AND it.id = mi.info_type_id 54 | AND n.id = ci.person_id 55 | AND rt.id = ci.role_id 56 | AND n.id = an.person_id 57 | AND ci.person_id = an.person_id 58 | AND chn.id = ci.person_role_id 59 | AND n.id = pi.person_id 60 | AND ci.person_id = pi.person_id 61 | AND it1.id = pi.info_type_id 62 | AND k.id = mk.keyword_id 63 | AND cct1.id = cc.subject_id 64 | AND cct2.id = cc.status_id; 65 | 66 | -------------------------------------------------------------------------------- /resource/jobquery/29c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(chn.name) AS voiced_char, 2 | MIN(n.name) AS voicing_actress, 3 | MIN(t.title) AS voiced_animation 4 | FROM aka_name AS an, 5 | complete_cast AS cc, 6 | comp_cast_type AS cct1, 7 | comp_cast_type AS cct2, 8 | char_name AS chn, 9 | cast_info AS ci, 10 | company_name AS cn, 11 | info_type AS it, 12 | info_type AS it1, 13 | keyword AS k, 14 | movie_companies AS mc, 15 | movie_info AS mi, 16 | movie_keyword AS mk, 17 | name AS n, 18 | person_info AS pi, 19 | role_type AS rt, 20 | title AS t 21 | WHERE cct1.kind ='cast' 22 | AND cct2.kind ='complete+verified' 23 | AND ci.note IN ('(voice)', 24 | '(voice: Japanese version)', 25 | '(voice) (uncredited)', 26 | '(voice: English version)') 27 | AND cn.country_code ='[us]' 28 | AND it.info = 'release dates' 29 | AND it1.info = 'trivia' 30 | AND k.keyword = 'computer-animation' 31 | AND mi.info IS NOT NULL 32 | AND (mi.info LIKE 'Japan:%200%' 33 | OR mi.info LIKE 'USA:%200%') 34 | AND n.gender ='f' 35 | AND n.name LIKE '%An%' 36 | AND rt.role ='actress' 37 | AND t.production_year BETWEEN 2000 AND 2010 38 | AND t.id = mi.movie_id 39 | AND t.id = mc.movie_id 40 | AND t.id = ci.movie_id 41 | AND t.id = mk.movie_id 42 | AND t.id = cc.movie_id 43 | AND mc.movie_id = ci.movie_id 44 | AND mc.movie_id = mi.movie_id 45 | AND mc.movie_id = mk.movie_id 46 | AND mc.movie_id = cc.movie_id 47 | AND mi.movie_id = ci.movie_id 48 | AND mi.movie_id = mk.movie_id 49 | AND mi.movie_id = cc.movie_id 50 | AND ci.movie_id = mk.movie_id 51 | AND ci.movie_id = cc.movie_id 52 | AND mk.movie_id = cc.movie_id 53 | AND cn.id = mc.company_id 54 | AND it.id = mi.info_type_id 55 | AND n.id = ci.person_id 56 | AND rt.id = ci.role_id 57 | AND n.id = an.person_id 58 | AND ci.person_id = an.person_id 59 | AND chn.id = ci.person_role_id 60 | AND n.id = pi.person_id 61 | AND ci.person_id = pi.person_id 62 | AND it1.id = pi.info_type_id 63 | AND k.id = mk.keyword_id 64 | AND cct1.id = cc.subject_id 65 | AND cct2.id = cc.status_id; 66 | 67 | -------------------------------------------------------------------------------- /resource/jobquery/2a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS movie_title 2 | FROM company_name AS cn, 3 | keyword AS k, 4 | movie_companies AS mc, 5 | movie_keyword AS mk, 6 | title AS t 7 | WHERE cn.country_code ='[de]' 8 | AND k.keyword ='character-name-in-title' 9 | AND cn.id = mc.company_id 10 | AND mc.movie_id = t.id 11 | AND t.id = mk.movie_id 12 | AND mk.keyword_id = k.id 13 | AND mc.movie_id = mk.movie_id; 14 | 15 | -------------------------------------------------------------------------------- /resource/jobquery/2b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS movie_title 2 | FROM company_name AS cn, 3 | keyword AS k, 4 | movie_companies AS mc, 5 | movie_keyword AS mk, 6 | title AS t 7 | WHERE cn.country_code ='[nl]' 8 | AND k.keyword ='character-name-in-title' 9 | AND cn.id = mc.company_id 10 | AND mc.movie_id = t.id 11 | AND t.id = mk.movie_id 12 | AND mk.keyword_id = k.id 13 | AND mc.movie_id = mk.movie_id; 14 | 15 | -------------------------------------------------------------------------------- /resource/jobquery/2c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS movie_title 2 | FROM company_name AS cn, 3 | keyword AS k, 4 | movie_companies AS mc, 5 | movie_keyword AS mk, 6 | title AS t 7 | WHERE cn.country_code ='[sm]' 8 | AND k.keyword ='character-name-in-title' 9 | AND cn.id = mc.company_id 10 | AND mc.movie_id = t.id 11 | AND t.id = mk.movie_id 12 | AND mk.keyword_id = k.id 13 | AND mc.movie_id = mk.movie_id; 14 | 15 | -------------------------------------------------------------------------------- /resource/jobquery/2d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS movie_title 2 | FROM company_name AS cn, 3 | keyword AS k, 4 | movie_companies AS mc, 5 | movie_keyword AS mk, 6 | title AS t 7 | WHERE cn.country_code ='[us]' 8 | AND k.keyword ='character-name-in-title' 9 | AND cn.id = mc.company_id 10 | AND mc.movie_id = t.id 11 | AND t.id = mk.movie_id 12 | AND mk.keyword_id = k.id 13 | AND mc.movie_id = mk.movie_id; 14 | 15 | -------------------------------------------------------------------------------- /resource/jobquery/30a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(n.name) AS writer, 4 | MIN(t.title) AS complete_violent_movie 5 | FROM complete_cast AS cc, 6 | comp_cast_type AS cct1, 7 | comp_cast_type AS cct2, 8 | cast_info AS ci, 9 | info_type AS it1, 10 | info_type AS it, 11 | keyword AS k, 12 | movie_info AS mi, 13 | movie_info_idx AS mi_idx, 14 | movie_keyword AS mk, 15 | name AS n, 16 | title AS t 17 | WHERE cct1.kind IN ('cast', 18 | 'crew') 19 | AND cct2.kind ='complete+verified' 20 | AND ci.note IN ('(writer)', 21 | '(head writer)', 22 | '(written by)', 23 | '(story)', 24 | '(story editor)') 25 | AND it1.info = 'genres' 26 | AND it.info = 'votes' 27 | AND k.keyword IN ('murder', 28 | 'violence', 29 | 'blood', 30 | 'gore', 31 | 'death', 32 | 'female-nudity', 33 | 'hospital') 34 | AND mi.info IN ('Horror', 35 | 'Thriller') 36 | AND n.gender = 'm' 37 | AND t.production_year > 2000 38 | AND t.id = mi.movie_id 39 | AND t.id = mi_idx.movie_id 40 | AND t.id = ci.movie_id 41 | AND t.id = mk.movie_id 42 | AND t.id = cc.movie_id 43 | AND ci.movie_id = mi.movie_id 44 | AND ci.movie_id = mi_idx.movie_id 45 | AND ci.movie_id = mk.movie_id 46 | AND ci.movie_id = cc.movie_id 47 | AND mi.movie_id = mi_idx.movie_id 48 | AND mi.movie_id = mk.movie_id 49 | AND mi.movie_id = cc.movie_id 50 | AND mi_idx.movie_id = mk.movie_id 51 | AND mi_idx.movie_id = cc.movie_id 52 | AND mk.movie_id = cc.movie_id 53 | AND n.id = ci.person_id 54 | AND it1.id = mi.info_type_id 55 | AND it.id = mi_idx.info_type_id 56 | AND k.id = mk.keyword_id 57 | AND cct1.id = cc.subject_id 58 | AND cct2.id = cc.status_id; 59 | 60 | -------------------------------------------------------------------------------- /resource/jobquery/30b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(n.name) AS writer, 4 | MIN(t.title) AS complete_gore_movie 5 | FROM complete_cast AS cc, 6 | comp_cast_type AS cct1, 7 | comp_cast_type AS cct2, 8 | cast_info AS ci, 9 | info_type AS it1, 10 | info_type AS it, 11 | keyword AS k, 12 | movie_info AS mi, 13 | movie_info_idx AS mi_idx, 14 | movie_keyword AS mk, 15 | name AS n, 16 | title AS t 17 | WHERE cct1.kind IN ('cast', 18 | 'crew') 19 | AND cct2.kind ='complete+verified' 20 | AND ci.note IN ('(writer)', 21 | '(head writer)', 22 | '(written by)', 23 | '(story)', 24 | '(story editor)') 25 | AND it1.info = 'genres' 26 | AND it.info = 'votes' 27 | AND k.keyword IN ('murder', 28 | 'violence', 29 | 'blood', 30 | 'gore', 31 | 'death', 32 | 'female-nudity', 33 | 'hospital') 34 | AND mi.info IN ('Horror', 35 | 'Thriller') 36 | AND n.gender = 'm' 37 | AND t.production_year > 2000 38 | AND (t.title LIKE '%Freddy%' 39 | OR t.title LIKE '%Jason%' 40 | OR t.title LIKE 'Saw%') 41 | AND t.id = mi.movie_id 42 | AND t.id = mi_idx.movie_id 43 | AND t.id = ci.movie_id 44 | AND t.id = mk.movie_id 45 | AND t.id = cc.movie_id 46 | AND ci.movie_id = mi.movie_id 47 | AND ci.movie_id = mi_idx.movie_id 48 | AND ci.movie_id = mk.movie_id 49 | AND ci.movie_id = cc.movie_id 50 | AND mi.movie_id = mi_idx.movie_id 51 | AND mi.movie_id = mk.movie_id 52 | AND mi.movie_id = cc.movie_id 53 | AND mi_idx.movie_id = mk.movie_id 54 | AND mi_idx.movie_id = cc.movie_id 55 | AND mk.movie_id = cc.movie_id 56 | AND n.id = ci.person_id 57 | AND it1.id = mi.info_type_id 58 | AND it.id = mi_idx.info_type_id 59 | AND k.id = mk.keyword_id 60 | AND cct1.id = cc.subject_id 61 | AND cct2.id = cc.status_id; 62 | 63 | -------------------------------------------------------------------------------- /resource/jobquery/30c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(n.name) AS writer, 4 | MIN(t.title) AS complete_violent_movie 5 | FROM complete_cast AS cc, 6 | comp_cast_type AS cct1, 7 | comp_cast_type AS cct2, 8 | cast_info AS ci, 9 | info_type AS it1, 10 | info_type AS it, 11 | keyword AS k, 12 | movie_info AS mi, 13 | movie_info_idx AS mi_idx, 14 | movie_keyword AS mk, 15 | name AS n, 16 | title AS t 17 | WHERE cct1.kind = 'cast' 18 | AND cct2.kind ='complete+verified' 19 | AND ci.note IN ('(writer)', 20 | '(head writer)', 21 | '(written by)', 22 | '(story)', 23 | '(story editor)') 24 | AND it1.info = 'genres' 25 | AND it.info = 'votes' 26 | AND k.keyword IN ('murder', 27 | 'violence', 28 | 'blood', 29 | 'gore', 30 | 'death', 31 | 'female-nudity', 32 | 'hospital') 33 | AND mi.info IN ('Horror', 34 | 'Action', 35 | 'Sci-Fi', 36 | 'Thriller', 37 | 'Crime', 38 | 'War') 39 | AND n.gender = 'm' 40 | AND t.id = mi.movie_id 41 | AND t.id = mi_idx.movie_id 42 | AND t.id = ci.movie_id 43 | AND t.id = mk.movie_id 44 | AND t.id = cc.movie_id 45 | AND ci.movie_id = mi.movie_id 46 | AND ci.movie_id = mi_idx.movie_id 47 | AND ci.movie_id = mk.movie_id 48 | AND ci.movie_id = cc.movie_id 49 | AND mi.movie_id = mi_idx.movie_id 50 | AND mi.movie_id = mk.movie_id 51 | AND mi.movie_id = cc.movie_id 52 | AND mi_idx.movie_id = mk.movie_id 53 | AND mi_idx.movie_id = cc.movie_id 54 | AND mk.movie_id = cc.movie_id 55 | AND n.id = ci.person_id 56 | AND it1.id = mi.info_type_id 57 | AND it.id = mi_idx.info_type_id 58 | AND k.id = mk.keyword_id 59 | AND cct1.id = cc.subject_id 60 | AND cct2.id = cc.status_id; 61 | 62 | -------------------------------------------------------------------------------- /resource/jobquery/31a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(n.name) AS writer, 4 | MIN(t.title) AS violent_liongate_movie 5 | FROM cast_info AS ci, 6 | company_name AS cn, 7 | info_type AS it1, 8 | info_type AS it, 9 | keyword AS k, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_info_idx AS mi_idx, 13 | movie_keyword AS mk, 14 | name AS n, 15 | title AS t 16 | WHERE ci.note IN ('(writer)', 17 | '(head writer)', 18 | '(written by)', 19 | '(story)', 20 | '(story editor)') 21 | AND cn.name LIKE 'Lionsgate%' 22 | AND it1.info = 'genres' 23 | AND it.info = 'votes' 24 | AND k.keyword IN ('murder', 25 | 'violence', 26 | 'blood', 27 | 'gore', 28 | 'death', 29 | 'female-nudity', 30 | 'hospital') 31 | AND mi.info IN ('Horror', 32 | 'Thriller') 33 | AND n.gender = 'm' 34 | AND t.id = mi.movie_id 35 | AND t.id = mi_idx.movie_id 36 | AND t.id = ci.movie_id 37 | AND t.id = mk.movie_id 38 | AND t.id = mc.movie_id 39 | AND ci.movie_id = mi.movie_id 40 | AND ci.movie_id = mi_idx.movie_id 41 | AND ci.movie_id = mk.movie_id 42 | AND ci.movie_id = mc.movie_id 43 | AND mi.movie_id = mi_idx.movie_id 44 | AND mi.movie_id = mk.movie_id 45 | AND mi.movie_id = mc.movie_id 46 | AND mi_idx.movie_id = mk.movie_id 47 | AND mi_idx.movie_id = mc.movie_id 48 | AND mk.movie_id = mc.movie_id 49 | AND n.id = ci.person_id 50 | AND it1.id = mi.info_type_id 51 | AND it.id = mi_idx.info_type_id 52 | AND k.id = mk.keyword_id 53 | AND cn.id = mc.company_id; 54 | 55 | -------------------------------------------------------------------------------- /resource/jobquery/31b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(n.name) AS writer, 4 | MIN(t.title) AS violent_liongate_movie 5 | FROM cast_info AS ci, 6 | company_name AS cn, 7 | info_type AS it1, 8 | info_type AS it, 9 | keyword AS k, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_info_idx AS mi_idx, 13 | movie_keyword AS mk, 14 | name AS n, 15 | title AS t 16 | WHERE ci.note IN ('(writer)', 17 | '(head writer)', 18 | '(written by)', 19 | '(story)', 20 | '(story editor)') 21 | AND cn.name LIKE 'Lionsgate%' 22 | AND it1.info = 'genres' 23 | AND it.info = 'votes' 24 | AND k.keyword IN ('murder', 25 | 'violence', 26 | 'blood', 27 | 'gore', 28 | 'death', 29 | 'female-nudity', 30 | 'hospital') 31 | AND mc.note LIKE '%(Blu-ray)%' 32 | AND mi.info IN ('Horror', 33 | 'Thriller') 34 | AND n.gender = 'm' 35 | AND t.production_year > 2000 36 | AND (t.title LIKE '%Freddy%' 37 | OR t.title LIKE '%Jason%' 38 | OR t.title LIKE 'Saw%') 39 | AND t.id = mi.movie_id 40 | AND t.id = mi_idx.movie_id 41 | AND t.id = ci.movie_id 42 | AND t.id = mk.movie_id 43 | AND t.id = mc.movie_id 44 | AND ci.movie_id = mi.movie_id 45 | AND ci.movie_id = mi_idx.movie_id 46 | AND ci.movie_id = mk.movie_id 47 | AND ci.movie_id = mc.movie_id 48 | AND mi.movie_id = mi_idx.movie_id 49 | AND mi.movie_id = mk.movie_id 50 | AND mi.movie_id = mc.movie_id 51 | AND mi_idx.movie_id = mk.movie_id 52 | AND mi_idx.movie_id = mc.movie_id 53 | AND mk.movie_id = mc.movie_id 54 | AND n.id = ci.person_id 55 | AND it1.id = mi.info_type_id 56 | AND it.id = mi_idx.info_type_id 57 | AND k.id = mk.keyword_id 58 | AND cn.id = mc.company_id; 59 | 60 | -------------------------------------------------------------------------------- /resource/jobquery/31c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi.info) AS movie_budget, 2 | MIN(mi_idx.info) AS movie_votes, 3 | MIN(n.name) AS writer, 4 | MIN(t.title) AS violent_liongate_movie 5 | FROM cast_info AS ci, 6 | company_name AS cn, 7 | info_type AS it1, 8 | info_type AS it, 9 | keyword AS k, 10 | movie_companies AS mc, 11 | movie_info AS mi, 12 | movie_info_idx AS mi_idx, 13 | movie_keyword AS mk, 14 | name AS n, 15 | title AS t 16 | WHERE ci.note IN ('(writer)', 17 | '(head writer)', 18 | '(written by)', 19 | '(story)', 20 | '(story editor)') 21 | AND cn.name LIKE 'Lionsgate%' 22 | AND it1.info = 'genres' 23 | AND it.info = 'votes' 24 | AND k.keyword IN ('murder', 25 | 'violence', 26 | 'blood', 27 | 'gore', 28 | 'death', 29 | 'female-nudity', 30 | 'hospital') 31 | AND mi.info IN ('Horror', 32 | 'Action', 33 | 'Sci-Fi', 34 | 'Thriller', 35 | 'Crime', 36 | 'War') 37 | AND t.id = mi.movie_id 38 | AND t.id = mi_idx.movie_id 39 | AND t.id = ci.movie_id 40 | AND t.id = mk.movie_id 41 | AND t.id = mc.movie_id 42 | AND ci.movie_id = mi.movie_id 43 | AND ci.movie_id = mi_idx.movie_id 44 | AND ci.movie_id = mk.movie_id 45 | AND ci.movie_id = mc.movie_id 46 | AND mi.movie_id = mi_idx.movie_id 47 | AND mi.movie_id = mk.movie_id 48 | AND mi.movie_id = mc.movie_id 49 | AND mi_idx.movie_id = mk.movie_id 50 | AND mi_idx.movie_id = mc.movie_id 51 | AND mk.movie_id = mc.movie_id 52 | AND n.id = ci.person_id 53 | AND it1.id = mi.info_type_id 54 | AND it.id = mi_idx.info_type_id 55 | AND k.id = mk.keyword_id 56 | AND cn.id = mc.company_id; 57 | 58 | -------------------------------------------------------------------------------- /resource/jobquery/32a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(lt.link) AS link_type, 2 | MIN(t1.title) AS first_movie, 3 | MIN(t.title) AS second_movie 4 | FROM keyword AS k, 5 | link_type AS lt, 6 | movie_keyword AS mk, 7 | movie_link AS ml, 8 | title AS t1, 9 | title AS t 10 | WHERE k.keyword ='10,000-mile-club' 11 | AND mk.keyword_id = k.id 12 | AND t1.id = mk.movie_id 13 | AND ml.movie_id = t1.id 14 | AND ml.linked_movie_id = t.id 15 | AND lt.id = ml.link_type_id 16 | AND mk.movie_id = t1.id; 17 | 18 | -------------------------------------------------------------------------------- /resource/jobquery/32b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(lt.link) AS link_type, 2 | MIN(t1.title) AS first_movie, 3 | MIN(t.title) AS second_movie 4 | FROM keyword AS k, 5 | link_type AS lt, 6 | movie_keyword AS mk, 7 | movie_link AS ml, 8 | title AS t1, 9 | title AS t 10 | WHERE k.keyword ='character-name-in-title' 11 | AND mk.keyword_id = k.id 12 | AND t1.id = mk.movie_id 13 | AND ml.movie_id = t1.id 14 | AND ml.linked_movie_id = t.id 15 | AND lt.id = ml.link_type_id 16 | AND mk.movie_id = t1.id; 17 | 18 | -------------------------------------------------------------------------------- /resource/jobquery/33a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn1.name) AS first_company, 2 | MIN(cn.name) AS second_company, 3 | MIN(mi_idx1.info) AS first_rating, 4 | MIN(mi_idx.info) AS second_rating, 5 | MIN(t1.title) AS first_movie, 6 | MIN(t.title) AS second_movie 7 | FROM company_name AS cn1, 8 | company_name AS cn, 9 | info_type AS it1, 10 | info_type AS it, 11 | kind_type AS kt1, 12 | kind_type AS kt, 13 | link_type AS lt, 14 | movie_companies AS mc1, 15 | movie_companies AS mc, 16 | movie_info_idx AS mi_idx1, 17 | movie_info_idx AS mi_idx, 18 | movie_link AS ml, 19 | title AS t1, 20 | title AS t 21 | WHERE cn1.country_code = '[us]' 22 | AND it1.info = 'rating' 23 | AND it.info = 'rating' 24 | AND kt1.kind IN ('tv series') 25 | AND kt.kind IN ('tv series') 26 | AND lt.link IN ('sequel', 27 | 'follows', 28 | 'followed by') 29 | AND mi_idx.info < '3.0' 30 | AND t.production_year BETWEEN 2005 AND 2008 31 | AND lt.id = ml.link_type_id 32 | AND t1.id = ml.movie_id 33 | AND t.id = ml.linked_movie_id 34 | AND it1.id = mi_idx1.info_type_id 35 | AND t1.id = mi_idx1.movie_id 36 | AND kt1.id = t1.kind_id 37 | AND cn1.id = mc1.company_id 38 | AND t1.id = mc1.movie_id 39 | AND ml.movie_id = mi_idx1.movie_id 40 | AND ml.movie_id = mc1.movie_id 41 | AND mi_idx1.movie_id = mc1.movie_id 42 | AND it.id = mi_idx.info_type_id 43 | AND t.id = mi_idx.movie_id 44 | AND kt.id = t.kind_id 45 | AND cn.id = mc.company_id 46 | AND t.id = mc.movie_id 47 | AND ml.linked_movie_id = mi_idx.movie_id 48 | AND ml.linked_movie_id = mc.movie_id 49 | AND mi_idx.movie_id = mc.movie_id; 50 | 51 | -------------------------------------------------------------------------------- /resource/jobquery/33b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn1.name) AS first_company, 2 | MIN(cn.name) AS second_company, 3 | MIN(mi_idx1.info) AS first_rating, 4 | MIN(mi_idx.info) AS second_rating, 5 | MIN(t1.title) AS first_movie, 6 | MIN(t.title) AS second_movie 7 | FROM company_name AS cn1, 8 | company_name AS cn, 9 | info_type AS it1, 10 | info_type AS it, 11 | kind_type AS kt1, 12 | kind_type AS kt, 13 | link_type AS lt, 14 | movie_companies AS mc1, 15 | movie_companies AS mc, 16 | movie_info_idx AS mi_idx1, 17 | movie_info_idx AS mi_idx, 18 | movie_link AS ml, 19 | title AS t1, 20 | title AS t 21 | WHERE cn1.country_code = '[nl]' 22 | AND it1.info = 'rating' 23 | AND it.info = 'rating' 24 | AND kt1.kind IN ('tv series') 25 | AND kt.kind IN ('tv series') 26 | AND lt.link LIKE '%follow%' 27 | AND mi_idx.info < '3.0' 28 | AND t.production_year = 2007 29 | AND lt.id = ml.link_type_id 30 | AND t1.id = ml.movie_id 31 | AND t.id = ml.linked_movie_id 32 | AND it1.id = mi_idx1.info_type_id 33 | AND t1.id = mi_idx1.movie_id 34 | AND kt1.id = t1.kind_id 35 | AND cn1.id = mc1.company_id 36 | AND t1.id = mc1.movie_id 37 | AND ml.movie_id = mi_idx1.movie_id 38 | AND ml.movie_id = mc1.movie_id 39 | AND mi_idx1.movie_id = mc1.movie_id 40 | AND it.id = mi_idx.info_type_id 41 | AND t.id = mi_idx.movie_id 42 | AND kt.id = t.kind_id 43 | AND cn.id = mc.company_id 44 | AND t.id = mc.movie_id 45 | AND ml.linked_movie_id = mi_idx.movie_id 46 | AND ml.linked_movie_id = mc.movie_id 47 | AND mi_idx.movie_id = mc.movie_id; 48 | 49 | -------------------------------------------------------------------------------- /resource/jobquery/33c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(cn1.name) AS first_company, 2 | MIN(cn.name) AS second_company, 3 | MIN(mi_idx1.info) AS first_rating, 4 | MIN(mi_idx.info) AS second_rating, 5 | MIN(t1.title) AS first_movie, 6 | MIN(t.title) AS second_movie 7 | FROM company_name AS cn1, 8 | company_name AS cn, 9 | info_type AS it1, 10 | info_type AS it, 11 | kind_type AS kt1, 12 | kind_type AS kt, 13 | link_type AS lt, 14 | movie_companies AS mc1, 15 | movie_companies AS mc, 16 | movie_info_idx AS mi_idx1, 17 | movie_info_idx AS mi_idx, 18 | movie_link AS ml, 19 | title AS t1, 20 | title AS t 21 | WHERE cn1.country_code != '[us]' 22 | AND it1.info = 'rating' 23 | AND it.info = 'rating' 24 | AND kt1.kind IN ('tv series', 25 | 'episode') 26 | AND kt.kind IN ('tv series', 27 | 'episode') 28 | AND lt.link IN ('sequel', 29 | 'follows', 30 | 'followed by') 31 | AND mi_idx.info < '3.5' 32 | AND t.production_year BETWEEN 2000 AND 2010 33 | AND lt.id = ml.link_type_id 34 | AND t1.id = ml.movie_id 35 | AND t.id = ml.linked_movie_id 36 | AND it1.id = mi_idx1.info_type_id 37 | AND t1.id = mi_idx1.movie_id 38 | AND kt1.id = t1.kind_id 39 | AND cn1.id = mc1.company_id 40 | AND t1.id = mc1.movie_id 41 | AND ml.movie_id = mi_idx1.movie_id 42 | AND ml.movie_id = mc1.movie_id 43 | AND mi_idx1.movie_id = mc1.movie_id 44 | AND it.id = mi_idx.info_type_id 45 | AND t.id = mi_idx.movie_id 46 | AND kt.id = t.kind_id 47 | AND cn.id = mc.company_id 48 | AND t.id = mc.movie_id 49 | AND ml.linked_movie_id = mi_idx.movie_id 50 | AND ml.linked_movie_id = mc.movie_id 51 | AND mi_idx.movie_id = mc.movie_id; 52 | 53 | -------------------------------------------------------------------------------- /resource/jobquery/3a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS movie_title 2 | FROM keyword AS k, 3 | movie_info AS mi, 4 | movie_keyword AS mk, 5 | title AS t 6 | WHERE k.keyword LIKE '%sequel%' 7 | AND mi.info IN ('Sweden', 8 | 'Norway', 9 | 'Germany', 10 | 'Denmark', 11 | 'Swedish', 12 | 'Denish', 13 | 'Norwegian', 14 | 'German') 15 | AND t.production_year > 2005 16 | AND t.id = mi.movie_id 17 | AND t.id = mk.movie_id 18 | AND mk.movie_id = mi.movie_id 19 | AND k.id = mk.keyword_id; 20 | 21 | -------------------------------------------------------------------------------- /resource/jobquery/3b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS movie_title 2 | FROM keyword AS k, 3 | movie_info AS mi, 4 | movie_keyword AS mk, 5 | title AS t 6 | WHERE k.keyword LIKE '%sequel%' 7 | AND mi.info IN ('Bulgaria') 8 | AND t.production_year > 2010 9 | AND t.id = mi.movie_id 10 | AND t.id = mk.movie_id 11 | AND mk.movie_id = mi.movie_id 12 | AND k.id = mk.keyword_id; 13 | 14 | -------------------------------------------------------------------------------- /resource/jobquery/3c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS movie_title 2 | FROM keyword AS k, 3 | movie_info AS mi, 4 | movie_keyword AS mk, 5 | title AS t 6 | WHERE k.keyword LIKE '%sequel%' 7 | AND mi.info IN ('Sweden', 8 | 'Norway', 9 | 'Germany', 10 | 'Denmark', 11 | 'Swedish', 12 | 'Denish', 13 | 'Norwegian', 14 | 'German', 15 | 'USA', 16 | 'American') 17 | AND t.production_year > 1990 18 | AND t.id = mi.movie_id 19 | AND t.id = mk.movie_id 20 | AND mk.movie_id = mi.movie_id 21 | AND k.id = mk.keyword_id; 22 | 23 | -------------------------------------------------------------------------------- /resource/jobquery/4a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi_idx.info) AS rating, 2 | MIN(t.title) AS movie_title 3 | FROM info_type AS it, 4 | keyword AS k, 5 | movie_info_idx AS mi_idx, 6 | movie_keyword AS mk, 7 | title AS t 8 | WHERE it.info ='rating' 9 | AND k.keyword LIKE '%sequel%' 10 | AND mi_idx.info > '5.0' 11 | AND t.production_year > 2005 12 | AND t.id = mi_idx.movie_id 13 | AND t.id = mk.movie_id 14 | AND mk.movie_id = mi_idx.movie_id 15 | AND k.id = mk.keyword_id 16 | AND it.id = mi_idx.info_type_id; 17 | 18 | -------------------------------------------------------------------------------- /resource/jobquery/4b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi_idx.info) AS rating, 2 | MIN(t.title) AS movie_title 3 | FROM info_type AS it, 4 | keyword AS k, 5 | movie_info_idx AS mi_idx, 6 | movie_keyword AS mk, 7 | title AS t 8 | WHERE it.info ='rating' 9 | AND k.keyword LIKE '%sequel%' 10 | AND mi_idx.info > '9.0' 11 | AND t.production_year > 2010 12 | AND t.id = mi_idx.movie_id 13 | AND t.id = mk.movie_id 14 | AND mk.movie_id = mi_idx.movie_id 15 | AND k.id = mk.keyword_id 16 | AND it.id = mi_idx.info_type_id; 17 | 18 | -------------------------------------------------------------------------------- /resource/jobquery/4c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(mi_idx.info) AS rating, 2 | MIN(t.title) AS movie_title 3 | FROM info_type AS it, 4 | keyword AS k, 5 | movie_info_idx AS mi_idx, 6 | movie_keyword AS mk, 7 | title AS t 8 | WHERE it.info ='rating' 9 | AND k.keyword LIKE '%sequel%' 10 | AND mi_idx.info > '2.0' 11 | AND t.production_year > 1990 12 | AND t.id = mi_idx.movie_id 13 | AND t.id = mk.movie_id 14 | AND mk.movie_id = mi_idx.movie_id 15 | AND k.id = mk.keyword_id 16 | AND it.id = mi_idx.info_type_id; 17 | 18 | -------------------------------------------------------------------------------- /resource/jobquery/5a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS typical_european_movie 2 | FROM company_type AS ct, 3 | info_type AS it, 4 | movie_companies AS mc, 5 | movie_info AS mi, 6 | title AS t 7 | WHERE ct.kind = 'production companies' 8 | AND mc.note LIKE '%(theatrical)%' 9 | AND mc.note LIKE '%(France)%' 10 | AND mi.info IN ('Sweden', 11 | 'Norway', 12 | 'Germany', 13 | 'Denmark', 14 | 'Swedish', 15 | 'Denish', 16 | 'Norwegian', 17 | 'German') 18 | AND t.production_year > 2005 19 | AND t.id = mi.movie_id 20 | AND t.id = mc.movie_id 21 | AND mc.movie_id = mi.movie_id 22 | AND ct.id = mc.company_type_id 23 | AND it.id = mi.info_type_id; 24 | 25 | -------------------------------------------------------------------------------- /resource/jobquery/5b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS american_vhs_movie 2 | FROM company_type AS ct, 3 | info_type AS it, 4 | movie_companies AS mc, 5 | movie_info AS mi, 6 | title AS t 7 | WHERE ct.kind = 'production companies' 8 | AND mc.note LIKE '%(VHS)%' 9 | AND mc.note LIKE '%(USA)%' 10 | AND mc.note LIKE '%(1994)%' 11 | AND mi.info IN ('USA', 12 | 'America') 13 | AND t.production_year > 2010 14 | AND t.id = mi.movie_id 15 | AND t.id = mc.movie_id 16 | AND mc.movie_id = mi.movie_id 17 | AND ct.id = mc.company_type_id 18 | AND it.id = mi.info_type_id; 19 | 20 | -------------------------------------------------------------------------------- /resource/jobquery/5c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(t.title) AS american_movie 2 | FROM company_type AS ct, 3 | info_type AS it, 4 | movie_companies AS mc, 5 | movie_info AS mi, 6 | title AS t 7 | WHERE ct.kind = 'production companies' 8 | AND mc.note NOT LIKE '%(TV)%' 9 | AND mc.note LIKE '%(USA)%' 10 | AND mi.info IN ('Sweden', 11 | 'Norway', 12 | 'Germany', 13 | 'Denmark', 14 | 'Swedish', 15 | 'Denish', 16 | 'Norwegian', 17 | 'German', 18 | 'USA', 19 | 'American') 20 | AND t.production_year > 1990 21 | AND t.id = mi.movie_id 22 | AND t.id = mc.movie_id 23 | AND mc.movie_id = mi.movie_id 24 | AND ct.id = mc.company_type_id 25 | AND it.id = mi.info_type_id; 26 | 27 | -------------------------------------------------------------------------------- /resource/jobquery/6a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(k.keyword) AS movie_keyword, 2 | MIN(n.name) AS actor_name, 3 | MIN(t.title) AS marvel_movie 4 | FROM cast_info AS ci, 5 | keyword AS k, 6 | movie_keyword AS mk, 7 | name AS n, 8 | title AS t 9 | WHERE k.keyword = 'marvel-cinematic-universe' 10 | AND n.name LIKE '%Downey%Robert%' 11 | AND t.production_year > 2010 12 | AND k.id = mk.keyword_id 13 | AND t.id = mk.movie_id 14 | AND t.id = ci.movie_id 15 | AND ci.movie_id = mk.movie_id 16 | AND n.id = ci.person_id; 17 | 18 | -------------------------------------------------------------------------------- /resource/jobquery/6b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(k.keyword) AS movie_keyword, 2 | MIN(n.name) AS actor_name, 3 | MIN(t.title) AS hero_movie 4 | FROM cast_info AS ci, 5 | keyword AS k, 6 | movie_keyword AS mk, 7 | name AS n, 8 | title AS t 9 | WHERE k.keyword IN ('superhero', 10 | 'sequel', 11 | 'second-part', 12 | 'marvel-comics', 13 | 'based-on-comic', 14 | 'tv-special', 15 | 'fight', 16 | 'violence') 17 | AND n.name LIKE '%Downey%Robert%' 18 | AND t.production_year > 2014 19 | AND k.id = mk.keyword_id 20 | AND t.id = mk.movie_id 21 | AND t.id = ci.movie_id 22 | AND ci.movie_id = mk.movie_id 23 | AND n.id = ci.person_id; 24 | 25 | -------------------------------------------------------------------------------- /resource/jobquery/6c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(k.keyword) AS movie_keyword, 2 | MIN(n.name) AS actor_name, 3 | MIN(t.title) AS marvel_movie 4 | FROM cast_info AS ci, 5 | keyword AS k, 6 | movie_keyword AS mk, 7 | name AS n, 8 | title AS t 9 | WHERE k.keyword = 'marvel-cinematic-universe' 10 | AND n.name LIKE '%Downey%Robert%' 11 | AND t.production_year > 2014 12 | AND k.id = mk.keyword_id 13 | AND t.id = mk.movie_id 14 | AND t.id = ci.movie_id 15 | AND ci.movie_id = mk.movie_id 16 | AND n.id = ci.person_id; 17 | 18 | -------------------------------------------------------------------------------- /resource/jobquery/6d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(k.keyword) AS movie_keyword, 2 | MIN(n.name) AS actor_name, 3 | MIN(t.title) AS hero_movie 4 | FROM cast_info AS ci, 5 | keyword AS k, 6 | movie_keyword AS mk, 7 | name AS n, 8 | title AS t 9 | WHERE k.keyword IN ('superhero', 10 | 'sequel', 11 | 'second-part', 12 | 'marvel-comics', 13 | 'based-on-comic', 14 | 'tv-special', 15 | 'fight', 16 | 'violence') 17 | AND n.name LIKE '%Downey%Robert%' 18 | AND t.production_year > 2000 19 | AND k.id = mk.keyword_id 20 | AND t.id = mk.movie_id 21 | AND t.id = ci.movie_id 22 | AND ci.movie_id = mk.movie_id 23 | AND n.id = ci.person_id; 24 | 25 | -------------------------------------------------------------------------------- /resource/jobquery/6e.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(k.keyword) AS movie_keyword, 2 | MIN(n.name) AS actor_name, 3 | MIN(t.title) AS marvel_movie 4 | FROM cast_info AS ci, 5 | keyword AS k, 6 | movie_keyword AS mk, 7 | name AS n, 8 | title AS t 9 | WHERE k.keyword = 'marvel-cinematic-universe' 10 | AND n.name LIKE '%Downey%Robert%' 11 | AND t.production_year > 2000 12 | AND k.id = mk.keyword_id 13 | AND t.id = mk.movie_id 14 | AND t.id = ci.movie_id 15 | AND ci.movie_id = mk.movie_id 16 | AND n.id = ci.person_id; 17 | 18 | -------------------------------------------------------------------------------- /resource/jobquery/6f.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(k.keyword) AS movie_keyword, 2 | MIN(n.name) AS actor_name, 3 | MIN(t.title) AS hero_movie 4 | FROM cast_info AS ci, 5 | keyword AS k, 6 | movie_keyword AS mk, 7 | name AS n, 8 | title AS t 9 | WHERE k.keyword IN ('superhero', 10 | 'sequel', 11 | 'second-part', 12 | 'marvel-comics', 13 | 'based-on-comic', 14 | 'tv-special', 15 | 'fight', 16 | 'violence') 17 | AND t.production_year > 2000 18 | AND k.id = mk.keyword_id 19 | AND t.id = mk.movie_id 20 | AND t.id = ci.movie_id 21 | AND ci.movie_id = mk.movie_id 22 | AND n.id = ci.person_id; 23 | 24 | -------------------------------------------------------------------------------- /resource/jobquery/7a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS of_person, 2 | MIN(t.title) AS biography_movie 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | info_type AS it, 6 | link_type AS lt, 7 | movie_link AS ml, 8 | name AS n, 9 | person_info AS pi, 10 | title AS t 11 | WHERE an.name LIKE '%a%' 12 | AND it.info ='mini biography' 13 | AND lt.link ='features' 14 | AND n.name_pcode_cf BETWEEN 'A' AND 'F' 15 | AND ( n.gender = 'm' 16 | OR ( n.gender = 'f' 17 | AND n.name LIKE 'B%')) 18 | AND pi.note ='Volker Boehm' 19 | AND t.production_year BETWEEN 1980 AND 1995 20 | AND n.id = an.person_id 21 | AND n.id = pi.person_id 22 | AND ci.person_id = n.id 23 | AND t.id = ci.movie_id 24 | AND ml.linked_movie_id = t.id 25 | AND lt.id = ml.link_type_id 26 | AND it.id = pi.info_type_id 27 | AND pi.person_id = an.person_id 28 | AND pi.person_id = ci.person_id 29 | AND an.person_id = ci.person_id 30 | AND ci.movie_id = ml.linked_movie_id; 31 | 32 | -------------------------------------------------------------------------------- /resource/jobquery/7b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS of_person, 2 | MIN(t.title) AS biography_movie 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | info_type AS it, 6 | link_type AS lt, 7 | movie_link AS ml, 8 | name AS n, 9 | person_info AS pi, 10 | title AS t 11 | WHERE an.name LIKE '%a%' 12 | AND it.info ='mini biography' 13 | AND lt.link ='features' 14 | AND n.name_pcode_cf LIKE 'D%' 15 | AND n.gender ='m' 16 | AND pi.note ='Volker Boehm' 17 | AND t.production_year BETWEEN 1980 AND 1984 18 | AND n.id = an.person_id 19 | AND n.id = pi.person_id 20 | AND ci.person_id = n.id 21 | AND t.id = ci.movie_id 22 | AND ml.linked_movie_id = t.id 23 | AND lt.id = ml.link_type_id 24 | AND it.id = pi.info_type_id 25 | AND pi.person_id = an.person_id 26 | AND pi.person_id = ci.person_id 27 | AND an.person_id = ci.person_id 28 | AND ci.movie_id = ml.linked_movie_id; 29 | 30 | -------------------------------------------------------------------------------- /resource/jobquery/7c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(n.name) AS cast_member_name, 2 | MIN(pi.info) AS cast_member_info 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | info_type AS it, 6 | link_type AS lt, 7 | movie_link AS ml, 8 | name AS n, 9 | person_info AS pi, 10 | title AS t 11 | WHERE an.name IS NOT NULL 12 | AND (an.name LIKE '%a%' 13 | OR an.name LIKE 'A%') 14 | AND it.info ='mini biography' 15 | AND lt.link IN ('references', 16 | 'referenced in', 17 | 'features', 18 | 'featured in') 19 | AND n.name_pcode_cf BETWEEN 'A' AND 'F' 20 | AND ( n.gender = 'm' 21 | OR ( n.gender = 'f' 22 | AND n.name LIKE 'A%')) 23 | AND pi.note IS NOT NULL 24 | AND t.production_year BETWEEN 1980 AND 2010 25 | AND n.id = an.person_id 26 | AND n.id = pi.person_id 27 | AND ci.person_id = n.id 28 | AND t.id = ci.movie_id 29 | AND ml.linked_movie_id = t.id 30 | AND lt.id = ml.link_type_id 31 | AND it.id = pi.info_type_id 32 | AND pi.person_id = an.person_id 33 | AND pi.person_id = ci.person_id 34 | AND an.person_id = ci.person_id 35 | AND ci.movie_id = ml.linked_movie_id; 36 | 37 | -------------------------------------------------------------------------------- /resource/jobquery/8a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS actress_pseudonym, 2 | MIN(t.title) AS japanese_movie_dubbed 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | movie_companies AS mc, 7 | name AS n, 8 | role_type AS rt, 9 | title AS t 10 | WHERE ci.note ='(voice: English version)' 11 | AND cn.country_code ='[jp]' 12 | AND mc.note LIKE '%(Japan)%' 13 | AND mc.note NOT LIKE '%(USA)%' 14 | AND n.name LIKE '%Yo%' 15 | AND n.name NOT LIKE '%Yu%' 16 | AND rt.role ='actress' 17 | AND an.person_id = n.id 18 | AND n.id = ci.person_id 19 | AND ci.movie_id = t.id 20 | AND t.id = mc.movie_id 21 | AND mc.company_id = cn.id 22 | AND ci.role_id = rt.id 23 | AND an.person_id = ci.person_id 24 | AND ci.movie_id = mc.movie_id; 25 | 26 | -------------------------------------------------------------------------------- /resource/jobquery/8b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS acress_pseudonym, 2 | MIN(t.title) AS japanese_anime_movie 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | movie_companies AS mc, 7 | name AS n, 8 | role_type AS rt, 9 | title AS t 10 | WHERE ci.note ='(voice: English version)' 11 | AND cn.country_code ='[jp]' 12 | AND mc.note LIKE '%(Japan)%' 13 | AND mc.note NOT LIKE '%(USA)%' 14 | AND (mc.note LIKE '%(2006)%' 15 | OR mc.note LIKE '%(2007)%') 16 | AND n.name LIKE '%Yo%' 17 | AND n.name NOT LIKE '%Yu%' 18 | AND rt.role ='actress' 19 | AND t.production_year BETWEEN 2006 AND 2007 20 | AND (t.title LIKE 'One Piece%' 21 | OR t.title LIKE 'Dragon Ball Z%') 22 | AND an.person_id = n.id 23 | AND n.id = ci.person_id 24 | AND ci.movie_id = t.id 25 | AND t.id = mc.movie_id 26 | AND mc.company_id = cn.id 27 | AND ci.role_id = rt.id 28 | AND an.person_id = ci.person_id 29 | AND ci.movie_id = mc.movie_id; 30 | 31 | -------------------------------------------------------------------------------- /resource/jobquery/8c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS writer_pseudo_name, 2 | MIN(t.title) AS movie_title 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | movie_companies AS mc, 7 | name AS n, 8 | role_type AS rt, 9 | title AS t 10 | WHERE cn.country_code ='[us]' 11 | AND rt.role ='writer' 12 | AND an.person_id = n.id 13 | AND n.id = ci.person_id 14 | AND ci.movie_id = t.id 15 | AND t.id = mc.movie_id 16 | AND mc.company_id = cn.id 17 | AND ci.role_id = rt.id 18 | AND an.person_id = ci.person_id 19 | AND ci.movie_id = mc.movie_id; 20 | 21 | -------------------------------------------------------------------------------- /resource/jobquery/8d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS costume_designer_pseudo, 2 | MIN(t.title) AS movie_with_costumes 3 | FROM aka_name AS an, 4 | cast_info AS ci, 5 | company_name AS cn, 6 | movie_companies AS mc, 7 | name AS n, 8 | role_type AS rt, 9 | title AS t 10 | WHERE cn.country_code ='[us]' 11 | AND rt.role ='costume designer' 12 | AND an.person_id = n.id 13 | AND n.id = ci.person_id 14 | AND ci.movie_id = t.id 15 | AND t.id = mc.movie_id 16 | AND mc.company_id = cn.id 17 | AND ci.role_id = rt.id 18 | AND an.person_id = ci.person_id 19 | AND ci.movie_id = mc.movie_id; 20 | 21 | -------------------------------------------------------------------------------- /resource/jobquery/9a.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS alternative_name, 2 | MIN(chn.name) AS character_name, 3 | MIN(t.title) AS movie 4 | FROM aka_name AS an, 5 | char_name AS chn, 6 | cast_info AS ci, 7 | company_name AS cn, 8 | movie_companies AS mc, 9 | name AS n, 10 | role_type AS rt, 11 | title AS t 12 | WHERE ci.note IN ('(voice)', 13 | '(voice: Japanese version)', 14 | '(voice) (uncredited)', 15 | '(voice: English version)') 16 | AND cn.country_code ='[us]' 17 | AND mc.note IS NOT NULL 18 | AND (mc.note LIKE '%(USA)%' 19 | OR mc.note LIKE '%(worldwide)%') 20 | AND n.gender ='f' 21 | AND n.name LIKE '%Ang%' 22 | AND rt.role ='actress' 23 | AND t.production_year BETWEEN 2005 AND 2015 24 | AND ci.movie_id = t.id 25 | AND t.id = mc.movie_id 26 | AND ci.movie_id = mc.movie_id 27 | AND mc.company_id = cn.id 28 | AND ci.role_id = rt.id 29 | AND n.id = ci.person_id 30 | AND chn.id = ci.person_role_id 31 | AND an.person_id = n.id 32 | AND an.person_id = ci.person_id; 33 | 34 | -------------------------------------------------------------------------------- /resource/jobquery/9b.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS alternative_name, 2 | MIN(chn.name) AS voiced_character, 3 | MIN(n.name) AS voicing_actress, 4 | MIN(t.title) AS american_movie 5 | FROM aka_name AS an, 6 | char_name AS chn, 7 | cast_info AS ci, 8 | company_name AS cn, 9 | movie_companies AS mc, 10 | name AS n, 11 | role_type AS rt, 12 | title AS t 13 | WHERE ci.note = '(voice)' 14 | AND cn.country_code ='[us]' 15 | AND mc.note LIKE '%(200%)%' 16 | AND (mc.note LIKE '%(USA)%' 17 | OR mc.note LIKE '%(worldwide)%') 18 | AND n.gender ='f' 19 | AND n.name LIKE '%Angel%' 20 | AND rt.role ='actress' 21 | AND t.production_year BETWEEN 2007 AND 2010 22 | AND ci.movie_id = t.id 23 | AND t.id = mc.movie_id 24 | AND ci.movie_id = mc.movie_id 25 | AND mc.company_id = cn.id 26 | AND ci.role_id = rt.id 27 | AND n.id = ci.person_id 28 | AND chn.id = ci.person_role_id 29 | AND an.person_id = n.id 30 | AND an.person_id = ci.person_id; 31 | 32 | -------------------------------------------------------------------------------- /resource/jobquery/9c.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS alternative_name, 2 | MIN(chn.name) AS voiced_character_name, 3 | MIN(n.name) AS voicing_actress, 4 | MIN(t.title) AS american_movie 5 | FROM aka_name AS an, 6 | char_name AS chn, 7 | cast_info AS ci, 8 | company_name AS cn, 9 | movie_companies AS mc, 10 | name AS n, 11 | role_type AS rt, 12 | title AS t 13 | WHERE ci.note IN ('(voice)', 14 | '(voice: Japanese version)', 15 | '(voice) (uncredited)', 16 | '(voice: English version)') 17 | AND cn.country_code ='[us]' 18 | AND n.gender ='f' 19 | AND n.name LIKE '%An%' 20 | AND rt.role ='actress' 21 | AND ci.movie_id = t.id 22 | AND t.id = mc.movie_id 23 | AND ci.movie_id = mc.movie_id 24 | AND mc.company_id = cn.id 25 | AND ci.role_id = rt.id 26 | AND n.id = ci.person_id 27 | AND chn.id = ci.person_role_id 28 | AND an.person_id = n.id 29 | AND an.person_id = ci.person_id; 30 | 31 | -------------------------------------------------------------------------------- /resource/jobquery/9d.sql: -------------------------------------------------------------------------------- 1 | SELECT MIN(an.name) AS alternative_name, 2 | MIN(chn.name) AS voiced_char_name, 3 | MIN(n.name) AS voicing_actress, 4 | MIN(t.title) AS american_movie 5 | FROM aka_name AS an, 6 | char_name AS chn, 7 | cast_info AS ci, 8 | company_name AS cn, 9 | movie_companies AS mc, 10 | name AS n, 11 | role_type AS rt, 12 | title AS t 13 | WHERE ci.note IN ('(voice)', 14 | '(voice: Japanese version)', 15 | '(voice) (uncredited)', 16 | '(voice: English version)') 17 | AND cn.country_code ='[us]' 18 | AND n.gender ='f' 19 | AND rt.role ='actress' 20 | AND ci.movie_id = t.id 21 | AND t.id = mc.movie_id 22 | AND ci.movie_id = mc.movie_id 23 | AND mc.company_id = cn.id 24 | AND ci.role_id = rt.id 25 | AND n.id = ci.person_id 26 | AND chn.id = ci.person_role_id 27 | AND an.person_id = n.id 28 | AND an.person_id = ci.person_id; 29 | 30 | -------------------------------------------------------------------------------- /tools/JDBCUtil.java: -------------------------------------------------------------------------------- 1 | import java.sql.Connection; 2 | import java.sql.DriverManager; 3 | import java.sql.SQLException; 4 | 5 | public class JDBCUtil { 6 | private static final String DRIVER = "org.postgresql.Driver"; 7 | private static final String URL = "jdbc:postgresql://localhost:5432/imdb2013"; 8 | private static final String NAME = "postgres"; 9 | private static final String PASSWORD = "wk"; 10 | private static Connection conn = null; 11 | 12 | 13 | static{ 14 | try { 15 | Class.forName(DRIVER); 16 | } catch (ClassNotFoundException e) { 17 | e.printStackTrace(); 18 | } 19 | } 20 | 21 | 22 | public static Connection getConnection() { 23 | try { 24 | return DriverManager.getConnection(URL, NAME, PASSWORD); 25 | } catch (SQLException e) { 26 | e.printStackTrace(); 27 | } 28 | return null; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /tools/dropCache.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | /bin/systemctl restart postgresql-10 3 | echo 3 > /proc/sys/vm/drop_caches 4 | echo finish 5 | 6 | -------------------------------------------------------------------------------- /tools/gethintresult.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.sql.Connection; 3 | import java.sql.ResultSet; 4 | import java.sql.SQLException; 5 | import java.sql.Statement; 6 | import java.text.SimpleDateFormat; 7 | import java.util.*; 8 | 9 | import static java.lang.Thread.sleep; 10 | 11 | public class gethintresult { 12 | 13 | static final String tablenameDir = "../resource/jobtablename"; 14 | static final String queryDir = "../resource/jobquery"; 15 | static final String hintDir = "./hint.txt"; 16 | static final String queryplanDir = "/data/trainingSet/data"; 17 | 18 | public static void main(String[] args) throws InterruptedException, IOException { 19 | SimpleDateFormat df = new SimpleDateFormat("MM-dd HH:mm:ss"); 20 | FileReader fr = new FileReader(hintDir); 21 | BufferedReader br = new BufferedReader(fr); 22 | String line; 23 | while ((line = br.readLine()) != null) { 24 | String[] temp = line.split(","); 25 | String queryName = temp[0].trim(); 26 | String hintcore = temp[1].trim(); 27 | String searchTime = temp[2].trim(); 28 | 29 | StringBuilder sb = new StringBuilder(); 30 | try { 31 | FileReader queryfr = new FileReader(queryDir + "/" + queryName + ".sql"); 32 | BufferedReader querybr = new BufferedReader(queryfr); 33 | String queryline; 34 | while ((queryline = querybr.readLine()) != null) { 35 | sb.append(queryline + "\n"); 36 | } 37 | querybr.close(); 38 | queryfr.close(); 39 | } catch (FileNotFoundException e) { 40 | e.printStackTrace(); 41 | } catch (IOException e) { 42 | e.printStackTrace(); 43 | } 44 | String queryContact = sb.toString(); 45 | //System.out.print(hint); 46 | String hint = "/*+ Leading(" + hintcore + ") */ \n explain analyze "; 47 | //String hint = "/*+ Leading(" + hintcore + ") */ \n explain "; 48 | //String hint = "explain "; 49 | 50 | try { 51 | sleep(1000); 52 | Process process = Runtime.getRuntime().exec("./dropCache.sh"); 53 | try { 54 | process.waitFor(); 55 | } catch (InterruptedException e) { 56 | e.printStackTrace(); 57 | } 58 | Connection connection = JDBCUtil.getConnection(); 59 | Statement statement = connection.createStatement(); 60 | 61 | String sql = hint + queryContact; 62 | statement.setQueryTimeout(2000); 63 | ResultSet rs = null; 64 | try { 65 | rs = statement.executeQuery(sql); 66 | rs.next(); 67 | //System.out.println(rs.getString(1)); 68 | double runtime = Double.valueOf(rs.getString(1).split("=")[4].split("[..]")[0]); 69 | //double runtime = Double.valueOf(rs.getString(1).split("=")[1].split("[..]")[0]); 70 | ArrayList queryplan = new ArrayList<>(); 71 | while (rs.next()) { 72 | queryplan.add(rs.getString(1)); 73 | } 74 | String realOrder = plan2hint(queryplan, 0, queryplan.size()); 75 | String planTime = queryplan.get(queryplan.size() - 2).split(" ")[2]; 76 | //String output = queryName + "," + runtime; 77 | String output = queryName + "," + runtime + "," + searchTime + "," + planTime + "," + df.format(new Date()) + "," + (realOrder.equals(hintcore)); 78 | System.out.println(output); 79 | 80 | try { 81 | BufferedWriter bw = path2bw(queryplanDir + "/" + queryName + " " + hintcore); 82 | for (String lineOfPlan : queryplan) { 83 | bw.write(lineOfPlan + "\n" ); 84 | } 85 | bw.flush(); 86 | bw.close(); 87 | } catch (IOException e) { 88 | e.printStackTrace(); 89 | } 90 | rs.close(); 91 | } catch (SQLException e) { 92 | String output = queryName + "," + "timeout" + "," + searchTime + "," + "timeout" + "," + df.format(new Date()); 93 | System.out.println(output); 94 | continue; 95 | } finally { 96 | statement.close(); 97 | connection.close(); 98 | } 99 | } catch (SQLException e) { 100 | e.printStackTrace(); 101 | } 102 | } 103 | } 104 | 105 | public static String plan2hint(ArrayList queryplan, int begin, int end) { 106 | if (queryplan.get(begin).contains("Scan") && !queryplan.get(begin).contains("Bitmap Index")) { 107 | String language = queryplan.get(begin); 108 | String[] word = language.split(" "); 109 | for (int i = 0; i < word.length; i++) { 110 | if (word[i].equals("on")) 111 | return word[i + 2]; 112 | } 113 | } 114 | if (begin == end) { 115 | return ""; 116 | } 117 | int blk = blank(queryplan.get(begin)); 118 | int count = 0; 119 | for (int i = begin + 1; i < end; i++) { 120 | if (blank(queryplan.get(i)) == blk + 6) { 121 | count += 1; 122 | if (count == 2) { 123 | String a = plan2hint(queryplan, begin + 1, i); 124 | String b = plan2hint(queryplan, i, end); 125 | return "( " + a + " " + b + " )"; 126 | } 127 | } 128 | } 129 | return plan2hint(queryplan, begin + 1, end); 130 | } 131 | 132 | public static int blank(String line) { 133 | for (int i = 0; i < line.length(); i++) 134 | if (line.charAt(i) == '-') 135 | return i; 136 | return -1; 137 | } 138 | 139 | public static BufferedWriter path2bw(String path) throws IOException { 140 | File f = new File(path); 141 | if (!f.exists()) { 142 | File dir = new File(f.getParent()); 143 | dir.mkdir(); 144 | f.createNewFile(); 145 | } 146 | FileWriter fw = new FileWriter(f); 147 | BufferedWriter bw = new BufferedWriter(fw); 148 | return bw; 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /tools/getoriginruntime.java: -------------------------------------------------------------------------------- 1 | import java.io.*; 2 | import java.sql.Connection; 3 | import java.sql.ResultSet; 4 | import java.sql.SQLException; 5 | import java.sql.Statement; 6 | import java.text.SimpleDateFormat; 7 | import java.util.*; 8 | 9 | import static java.lang.Thread.sleep; 10 | 11 | public class getoriginruntime { 12 | 13 | static final String tablenameDir = "../resource/jobtablename"; 14 | static final String queryDir = "../resource/jobquery"; 15 | 16 | public static void main(String[] args) throws InterruptedException, IOException { 17 | SimpleDateFormat df = new SimpleDateFormat("MM-dd HH:mm:ss"); 18 | File fileDirectory = new File(tablenameDir); 19 | String[] fileList = fileDirectory.list(); 20 | System.out.println(fileList.length); 21 | 22 | for (int i = 0; i < fileList.length; i++) { 23 | String queryName = fileList[i]; 24 | 25 | StringBuilder sb = new StringBuilder(); 26 | try { 27 | FileReader queryfr = new FileReader(queryDir + "/" + queryName + ".sql"); 28 | BufferedReader querybr = new BufferedReader(queryfr); 29 | String queryline; 30 | while ((queryline = querybr.readLine()) != null) { 31 | sb.append(queryline + "\n"); 32 | } 33 | querybr.close(); 34 | queryfr.close(); 35 | } catch (FileNotFoundException e) { 36 | e.printStackTrace(); 37 | } catch (IOException e) { 38 | e.printStackTrace(); 39 | } 40 | String queryContact = sb.toString(); 41 | //System.out.print(hint); 42 | String hint = "explain analyze "; 43 | 44 | try { 45 | sleep(3000); 46 | Process process = Runtime.getRuntime().exec("./dropCache.sh"); 47 | try { 48 | process.waitFor(); 49 | } catch (InterruptedException e) { 50 | e.printStackTrace(); 51 | } 52 | Connection connection = JDBCUtil.getConnection(); 53 | Statement statement = connection.createStatement(); 54 | 55 | String sql = hint + queryContact; 56 | statement.setQueryTimeout(600000000); 57 | ResultSet rs = null; 58 | try { 59 | rs = statement.executeQuery(sql); 60 | rs.next(); 61 | //System.out.println(rs.getString(1)); 62 | //double runtime = Double.valueOf(rs.getString(1).split("=")[4].split("[..]")[0]); 63 | //double runtime = Double.valueOf(rs.getString(1).split("=")[1].split("[..]")[0]); 64 | ArrayList queryplan = new ArrayList<>(); 65 | while (rs.next()) { 66 | queryplan.add(rs.getString(1)); 67 | } 68 | String realOrder = plan2hint(queryplan, 0, queryplan.size()); 69 | String planTime = queryplan.get(queryplan.size() - 2).split(" ")[2]; 70 | String runtime = queryplan.get(queryplan.size() - 1).split(" ")[2]; 71 | //String output = queryName + "," + runtime; 72 | String output = queryName + "," + runtime + "," + planTime + "," + df.format(new Date()) + "," + (realOrder.equals(hintcore)); 73 | System.out.println(output); 74 | 75 | rs.close(); 76 | } catch (SQLException e) { 77 | String output = queryName + "," + "timeout" + "," + df.format(new Date()); 78 | System.out.println(output); 79 | continue; 80 | } finally { 81 | statement.close(); 82 | connection.close(); 83 | } 84 | } catch (SQLException e) { 85 | e.printStackTrace(); 86 | } 87 | } 88 | } 89 | 90 | public static String plan2hint(ArrayList queryplan, int begin, int end) { 91 | if (queryplan.get(begin).contains("Scan") && !queryplan.get(begin).contains("Bitmap Index")) { 92 | String language = queryplan.get(begin); 93 | String[] word = language.split(" "); 94 | for (int i = 0; i < word.length; i++) { 95 | if (word[i].equals("on")) 96 | return word[i + 2]; 97 | } 98 | } 99 | if (begin == end) { 100 | return ""; 101 | } 102 | int blk = blank(queryplan.get(begin)); 103 | int count = 0; 104 | for (int i = begin + 1; i < end; i++) { 105 | if (blank(queryplan.get(i)) == blk + 6) { 106 | count += 1; 107 | if (count == 2) { 108 | String a = plan2hint(queryplan, begin + 1, i); 109 | String b = plan2hint(queryplan, i, end); 110 | return "( " + a + " " + b + " )"; 111 | } 112 | } 113 | } 114 | return plan2hint(queryplan, begin + 1, end); 115 | } 116 | 117 | public static int blank(String line) { 118 | for (int i = 0; i < line.length(); i++) 119 | if (line.charAt(i) == '-') 120 | return i; 121 | return -1; 122 | } 123 | 124 | public static BufferedWriter path2bw(String path) throws IOException { 125 | File f = new File(path); 126 | if (!f.exists()) { 127 | File dir = new File(f.getParent()); 128 | dir.mkdir(); 129 | f.createNewFile(); 130 | } 131 | FileWriter fw = new FileWriter(f); 132 | BufferedWriter bw = new BufferedWriter(fw); 133 | return bw; 134 | } 135 | } 136 | -------------------------------------------------------------------------------- /tools/getruntimerandom.java: -------------------------------------------------------------------------------- 1 | // Used to collect training data of the value network 2 | import java.io.*; 3 | import java.sql.Connection; 4 | import java.sql.ResultSet; 5 | import java.sql.SQLException; 6 | import java.sql.Statement; 7 | import java.text.SimpleDateFormat; 8 | import java.util.*; 9 | 10 | import static java.lang.Thread.sleep; 11 | 12 | public class getruntimerandom { 13 | 14 | static final String tablenameDir = "../resource/jobtablename"; 15 | static final String queryDir = "../resource/jobquery"; 16 | static final String shortDir = "../resource/shorttolong"; 17 | static final String outputDir = "./t6.sql"; 18 | static final String queryplanDir = "../data"; 19 | static final String queryEncodedDictDir = "./queryEncodedDict"; 20 | static final int tableNumber = 28; 21 | 22 | public static void main(String[] args) throws IOException, SQLException, InterruptedException { 23 | String[] fileList = new File(tablenameDir).list(); 24 | System.out.println(fileList.length); 25 | Arrays.sort(fileList); 26 | 27 | HashSet generateSet = new HashSet<>(); 28 | HashMap joinMatrixDict = new HashMap<>(); 29 | ArrayList table2int = new ArrayList<>(); 30 | HashSet historySet = new HashSet<>(); 31 | prepareData(joinMatrixDict, table2int, historySet); 32 | 33 | BufferedWriter bw = path2bwa(outputDir); 34 | while (true) { 35 | for (int i = 0; i < fileList.length; i++) { 36 | //1.get number of join, query contact 37 | String queryName = fileList[i]; 38 | String[] tables = getQueryTables(queryName); 39 | int joinNumber = tables.length - 1; 40 | 41 | //2.make hint 42 | generateSet.clear(); 43 | int[] state = joinMatrixDict.get(queryName).clone(); 44 | int[] matrix = new int[tableNumber * tableNumber]; 45 | generatematrix(state, matrix, joinNumber, 46 | generateSet, tables, table2int); 47 | 48 | //3.run hint query 49 | //System.out.println(queryName +","+generateSet.size()); 50 | if (joinNumber < 5) { 51 | for (String line : generateSet) { 52 | if (historySet.contains(queryName + line)) 53 | continue; 54 | historySet.add(queryName + line); 55 | //System.out.println(queryName + line); 56 | runQuery(queryName, line, bw); 57 | } 58 | } else { 59 | int count = 0; 60 | for (String line : generateSet) { 61 | if (historySet.contains(queryName + line)) 62 | continue; 63 | historySet.add(queryName + line); 64 | runQuery(queryName, line, bw); 65 | //System.out.println(queryName + line); 66 | count += 1; 67 | if (count > 25) 68 | break; 69 | } 70 | 71 | 72 | } 73 | } 74 | } 75 | } 76 | 77 | static class Action { 78 | int x; 79 | int y; 80 | 81 | Action(int x, int y) { 82 | this.x = x; 83 | this.y = y; 84 | } 85 | } 86 | 87 | public static void runQuery(String queryName, String hintCore, BufferedWriter bw) 88 | throws InterruptedException, IOException, SQLException { 89 | String queryContact = getQueryContent(queryName); 90 | sleep(1000); 91 | Process process = Runtime.getRuntime().exec("./dropCache.sh"); 92 | process.waitFor(); 93 | SimpleDateFormat df = new SimpleDateFormat("MM-dd HH:mm:ss"); 94 | Connection connection = JDBCUtil.getConnection(); 95 | Statement statement = connection.createStatement(); 96 | String hint = "/*+ Leading(" + hintCore + ") */ \n explain analyze \n "; 97 | String sql = hint + queryContact; 98 | statement.setQueryTimeout(600); 99 | ResultSet rs = null; 100 | try { 101 | rs = statement.executeQuery(sql); 102 | rs.next(); 103 | //System.out.println(rs.getString(1)); 104 | double cost = Double.valueOf(rs.getString(1).split("=")[4].split("[..]")[0]); 105 | ArrayList queryplan = new ArrayList<>(); 106 | while (rs.next()) { 107 | queryplan.add(rs.getString(1)); 108 | } 109 | String realOrder = plan2hint(queryplan, 0, queryplan.size()); 110 | String output = queryName + "," + hintCore + "," + cost + "," + realOrder + 111 | "," + (realOrder.equals(hintCore)) + "," + df.format(new Date()); 112 | System.out.println(output); 113 | bw.write(output + "\n"); 114 | rs.close(); 115 | BufferedWriter ba = path2bw(queryplanDir + "/" + queryName + " " + hintCore + ".txt"); 116 | for (String lineOfPlan : queryplan) { 117 | ba.write(lineOfPlan + "\n"); 118 | } 119 | ba.flush(); 120 | ba.close(); 121 | } catch (SQLException e) { 122 | String output = queryName + "," + hintCore + "," + "timeout,-," + df.format(new Date()); 123 | System.out.println(output); 124 | bw.write(output + "\n"); 125 | } finally { 126 | bw.flush(); 127 | statement.close(); 128 | connection.close(); 129 | } 130 | } 131 | 132 | public static String[] getQueryTables(String queryName) throws IOException { 133 | FileReader frtn = new FileReader(tablenameDir + "/" + queryName); 134 | BufferedReader brtn = new BufferedReader(frtn); 135 | String tablestemp = brtn.readLine(); 136 | String[] tables = tablestemp.substring(2, tablestemp.length() - 2).split("', '"); 137 | brtn.close(); 138 | frtn.close(); 139 | return tables; 140 | } 141 | 142 | public static String getQueryContent(String queryName) throws IOException { 143 | StringBuilder sb = new StringBuilder(); 144 | FileReader fr = new FileReader(queryDir + "/" + queryName + ".sql"); 145 | BufferedReader br = new BufferedReader(fr); 146 | String qline; 147 | while ((qline = br.readLine()) != null) { 148 | sb.append(qline + "\n"); 149 | } 150 | br.close(); 151 | fr.close(); 152 | return sb.toString(); 153 | } 154 | 155 | public static void matrixToHint(int[] matrix, HashSet hashSet, String[] tables, 156 | ArrayList table2int) { 157 | //decoed matrix to hint 158 | HashMap tempdect = new HashMap<>(); 159 | for (String tab : tables) { 160 | tempdect.put(tab, tab); 161 | } 162 | 163 | int correctcount = 0; 164 | int index = 0; 165 | while (correctcount != tables.length - 1) { 166 | int max = 0; 167 | for (int i1 = 0; i1 < matrix.length; i1++) { 168 | if (matrix[i1] > max) { 169 | max = matrix[i1]; 170 | index = i1; 171 | } 172 | } 173 | matrix[index] = 0; 174 | int indexa = index / tableNumber; 175 | int indexb = index % tableNumber; 176 | if (tempdect.get(table2int.get(indexa)).equals(tempdect.get(table2int.get(indexb)))) { 177 | return; 178 | } 179 | String string = "( " + tempdect.get(table2int.get(indexa)) + " " + tempdect.get(table2int.get(indexb)) + " )"; 180 | correctcount += 1; 181 | for (String j : string.split(" ")) 182 | if (tempdect.containsKey(j)) 183 | tempdect.put(j, string); 184 | } 185 | //System.out.println(tempdect.get(tables[0])); 186 | hashSet.add(tempdect.get(tables[0])); 187 | 188 | } 189 | 190 | public static void generatematrix(int[] state, int[] matrix, int joinNumber, 191 | HashSet hashSet, String[] tables, ArrayList table2int) { 192 | if (joinNumber == 0) { 193 | int[] temp = matrix.clone(); 194 | matrixToHint(temp, hashSet, tables, table2int); 195 | } 196 | ArrayList possibleActions = new ArrayList<>(); 197 | for (int x = 0; x < tableNumber; x++) { 198 | for (int y = 0; y < tableNumber; y++) { 199 | if (state[x * tableNumber + y] == 1) 200 | possibleActions.add(new Action(x, y)); 201 | } 202 | } 203 | for (int i = 0; i < possibleActions.size(); i++) { 204 | int x = possibleActions.get(i).x; 205 | int y = possibleActions.get(i).y; 206 | matrix[x * tableNumber + y] = joinNumber; 207 | state[x * tableNumber + y] = 0; 208 | state[y * tableNumber + x] = 0; 209 | generatematrix(state, matrix, joinNumber - 1, hashSet, tables, table2int); 210 | matrix[x * tableNumber + y] = 0; 211 | state[x * tableNumber + y] = 1; 212 | state[y * tableNumber + x] = 1; 213 | } 214 | } 215 | 216 | public static void prepareData(HashMap joinMatrixDict, 217 | ArrayList table2int, 218 | HashSet historySet) throws IOException { 219 | String dict = null; 220 | String short2long = null; 221 | dict = new BufferedReader(new FileReader(queryEncodedDictDir)).readLine(); 222 | dict = dict.substring(2, dict.length() - 2); 223 | short2long = new BufferedReader(new FileReader(shortDir)).readLine(); 224 | short2long = short2long.substring(2, short2long.length() - 2); 225 | 226 | String[] encodes = dict.split("], '"); 227 | for (String aaa : encodes) { 228 | String key = aaa.split("': \\[")[0]; 229 | String value = aaa.split("': \\[")[1]; 230 | int[] val = new int[tableNumber * tableNumber]; 231 | for (int i = 0; i < val.length; i++) { 232 | if (value.charAt(i * 3) == '0') { 233 | val[i] = 0; 234 | } else { 235 | val[i] = 1; 236 | } 237 | } 238 | joinMatrixDict.put(key, val); 239 | } 240 | 241 | String[] shortnames = short2long.split("', '"); 242 | for (String bbb : shortnames) { 243 | table2int.add(bbb.split("': '")[0]); 244 | } 245 | table2int.sort(Comparator.naturalOrder()); 246 | 247 | BufferedReader brt = new BufferedReader(new FileReader(outputDir)); 248 | String oneline; 249 | while ((oneline = brt.readLine()) != null) { 250 | String queryHint = oneline.split(",")[0] + oneline.split(",")[1]; 251 | if (!historySet.contains(queryHint)) { 252 | historySet.add(queryHint); 253 | } 254 | } 255 | brt.close(); 256 | } 257 | 258 | public static void swap(String[] tablenames, int i, int j) { 259 | String temp = tablenames[i]; 260 | tablenames[i] = tablenames[j]; 261 | tablenames[j] = temp; 262 | } 263 | 264 | public static BufferedWriter path2bw(String path) throws IOException { 265 | File f = new File(path); 266 | if (!f.exists()) { 267 | File dir = new File(f.getParent()); 268 | dir.mkdir(); 269 | f.createNewFile(); 270 | } 271 | FileWriter fw = new FileWriter(f); 272 | BufferedWriter bw = new BufferedWriter(fw); 273 | return bw; 274 | } 275 | 276 | public static BufferedWriter path2bwa(String path) throws IOException { 277 | File f = new File(path); 278 | if (!f.exists()) { 279 | File dir = new File(f.getParent()); 280 | dir.mkdir(); 281 | f.createNewFile(); 282 | } 283 | FileWriter fw = new FileWriter(f, true); 284 | BufferedWriter bw = new BufferedWriter(fw); 285 | return bw; 286 | } 287 | 288 | public static String plan2hint(ArrayList queryplan, int begin, int end) { 289 | if (begin == end) { 290 | return ""; 291 | } 292 | int blk = blank(queryplan.get(begin)); 293 | for (int i = begin + 1; i < end; i++) { 294 | if (blank(queryplan.get(i)) == blk && blank(queryplan.get(i)) != -1) { 295 | String b = plan2hint(queryplan, i, end); 296 | String a = plan2hint(queryplan, begin + 1, i); 297 | if (queryplan.get(begin).contains("Scan") && !queryplan.get(begin).contains("Bitmap Index")) { 298 | String language = queryplan.get(begin); 299 | String[] word = language.split(" "); 300 | for (int j = 0; j < word.length; j++) { 301 | if (word[j].equals("on")) 302 | a = word[j + 2]; 303 | } 304 | } 305 | return "( " + a + " " + b + " )"; 306 | } 307 | } 308 | if (queryplan.get(begin).contains("Scan") && !queryplan.get(begin).contains("Bitmap Index")) { 309 | String language = queryplan.get(begin); 310 | String[] word = language.split(" "); 311 | for (int j = 0; j < word.length; j++) { 312 | if (word[j].equals("on")) 313 | return word[j + 2]; 314 | } 315 | } 316 | return plan2hint(queryplan, begin + 1, end); 317 | } 318 | 319 | public static int blank(String line) { 320 | for (int i = 0; i < line.length() - 1; i++) 321 | if (line.charAt(i) == '-' && line.charAt(i + 1) == '>') 322 | return i; 323 | return -1; 324 | } 325 | 326 | } 327 | -------------------------------------------------------------------------------- /tools/postgresql-42.2.6.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HustAIsGroup/AlphaJoin/89c1f31e85f51fc8e33f468378e8cf3668a472b7/tools/postgresql-42.2.6.jar --------------------------------------------------------------------------------